ユーザーがオブジェクト初期化子を使用できるようにするさまざまな派生オブジェクトがあります。これらのフィールドが設定されているときにtrueにしたい「Initializing」プロパティがあり、その後、Initializingプロパティをfalseに設定したいと思います。
これを実行できるようにするために、オブジェクト初期化がいつ実行されたかをどのように知ることができますか?
class Foo
{
Public Foo(string p1, string p2)
{
Initializing = true;
Property1 = p1;
Property2 = p2;
Initializing = false;
}
bool Initializing;
string _property1;
string Property1
{
get { return _property1; }
set { _property1 = value; DoSomething(); }
}
string Property2 { get; set; }
public void DoSomething()
{
if(Initializing) return; // Don't want to continue if initializing
// Do something here
}
}
上記の例では、コンストラクターを使用すると正常に機能します。ただし、オブジェクト初期化子を使用して同じように機能させる方法が問題です。
編集:すべての否定論者のために、ここに私が探しているものを正確に探している他の誰かがいます-http: //blogs.clariusconsulting.net/kzu/how-to-make-object-initializers-more-useful/
残念ながら、それは不可能のように見えます。