今朝、私が構築しているアプリケーションで面白い状況に遭遇しました。私はこれを別の方法で解決しましたが、私はその答えが何であるかを知ることに興味があります。オブジェクトイニシャライザを使用したときの実行順序
我々は次のような状況を考えてみましょう:
public class SomeDependency
{
public string SomeThing { get; set; }
}
public class SomeClass
{
public SomeDependency Dependency { get; }
public SomeClass() : this(new SomeDependency) { }
public SomeClass(SomeDependency dependency)
{
Dependency = dependency;
}
}
は今のところ、このクラスを初期化する2つの方法があります:
は我々だけで言うことができる:
var x = new SomeClass();
もちろん私たちを与えるであろうと予想される状況。しかし、私たちが行う場合は、この:
var x = new SomeClass
{
Dependency = new SomeDependency { SomeThing = "some random string" }
};
我々は後者の状況でパラメータなしのコンストラクタを使用しますが、我々は、Dependency
にオブジェクト初期化子を経由して値を与えるので、私の質問を行います。
Dependency
this(new SomeDependency())
によって上書きされますコール?
*この(新しいSomeDependency())呼び出しによって依存関係が上書きされますか?*反対です。最初にコンストラクタが完全に実行された後、フィールド/プロパティの初期化が行われます( 'Dependency =')。オブジェクトの初期化子は純粋なsynctactic sugarです。 'new SomeClass'が新しいオブジェクトを返した後で*実行されます。 – xanatos