Javaでいくつかの関連する質問が見つかりましたが、C#では何も見つかりませんでしたので、重複を許してください。デフォルトのコンストラクタに変数を初期化するか、またはインラインで変数を初期化するかの違いはありますか?
短くて甘い、違いは何ですか?何かありますか?
public static class Foo
{
public static List<Bar> Bars;
static Foo()
{
Bars = new List<Bar>();
}
}
public static class Foo
{
public static List<Bar> Bars = new List<Bar>();
}
非スタティッククラスの場合の回答については、@Nick Gのコメントを参照してください。私はそれが静的クラスに何らかの影響を与えるかどうかを知りたいと思っています。
これで静的である必要はありません。この場合はどうですか?
public class Foo
{
public List<Bar> Bars;
public Foo()
{
Bars = new List<Bar>();
}
}
public class Foo
{
public List<Bar> Bars = new List<Bar>();
}
[this](http://jonskeet.uk/csharp/constructors.html)によると、インスタンスイニシャライザが最初に実行され、次にコンストラクタが実行されるという違いがあります。 [静的フィールドの初期化](https://msdn.microsoft.com/en-us/library/aa645758(v = vs.71).aspx)と[インスタンスフィールドの初期化](https://msdn.microsoft .com/en-us/library/aa645759(v = vs.71).aspx)は両方とも、フィールドがコンストラクタの前に初期化されていることを示します。 [ここ](https://blogs.msdn.microsoft.com/ericlippert/2008/02/15/why-do-initializers-run-in-the-opposite-order-as-constructors-part-one/)も読んでください。 )継承情報のために。 – Quantic
これはあなたの静的な質問に完全に答えないと思うが、助けになるかもしれない:http://csharpindepth.com/Articles/General/Beforefieldinit.aspx –
これをチェックする[記事](http://csharpindepth.com/Articles/General /Beforefieldinit.aspx)静的コンストラクタの存在にはわずかな意味があります。 – Rafal