반사를 통해 사유 재산을 설정할 수 있습니까?
public abstract class Entity
{
private int _id;
private DateTime? _createdOn;
public virtual T Id
{
get { return _id; }
private set { ChangePropertyAndNotify(ref _id, value, x => Id); }
}
public virtual DateTime? CreatedOn
{
get { return _createdOn; }
private set { ChangePropertyAndNotify(ref _createdOn, value, x => CreatedOn); }
}
}
나는 다음을 시도하고 어디는 작동하지 않는 t
유형을 나타냅니다 Entity
:
var t = typeof(Entity);
var mi = t.GetMethod("set_CreatedOn", BindingFlags.Instance | BindingFlags.NonPublic);
나는 이것을 할 수 있다고 생각하지만 나는 그것을 해결할 수 없습니다.
2
나는 이것이 늦다는 것을 알고 있지만, 나는 나의 '이유'를 공유 할 것이라는 생각이 필요하다는 것을 발견했습니다. 일부 타사 소프트웨어의 불편 함을 극복해야했습니다. 특히 Crystal Reports ExportToStream 메서드를 사용하고있었습니다. 이 메소드가 작성된 방식으로 스트림의 내부 버퍼에 대한 액세스가 허용되지 않았습니다. 보고서를 브라우저로 보내기 위해서는 스트림을 새 버퍼 (100K +)에 복사 한 다음 보내야했습니다. 스트림 개체의 비공개 '_exposable'필드를 'true'로 설정하여 내부 버퍼를 직접 보낼 수있어 각 요청에 대해 100,000 개 이상의 할당을 절약 할 수 있습니다.
—
Ray
왜? 모든 도메인 개체의 Id 속성에 개인 설정자가 있고 저장소 테스트를 구현하려고한다고 가정 해 보겠습니다. 그런 다음 저장소 테스트 프로젝트에서만 Id 속성을 설정할 수 있기를 원할 것입니다.
—
bounav 2015-06-17
또 다른 사용 시나리오 : 데이터를 가져올 때 "생성 일"과 같은 자동 생성 필드 설정.
—
ANeves 2014
또 다른 이유는 가능한지 궁금합니다. 이것이 제가이 질문을 보는 방법입니다.
—
Caleb Mauer