リフレクションを介してプライベートプロパティを設定できますか?
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」に設定することで、内部バッファーを直接送信でき、各リクエストで100K以上の割り当てを節約できました。
—
レイ
どうして?すべてのドメインオブジェクトのIdプロパティにプライベートセッターがあり、リポジトリテストを実装するとします。次に、リポジトリテストプロジェクトでのみ、Idプロパティを設定できるようにします。
—
bounav 2010年
別の使用シナリオ:データのインポート時に「作成日」などの自動生成フィールドを設定する。
—
ANeves 2014年
もう1つの理由は、それが可能であるかどうか私が知りたいだけなのです。それが私がこの質問を見ることになった方法です。
—
カレブマウアー