Yapıcı çağrılmadan önce statik alan başlatması tamamlansın mı?Statik alan başlatması C# nasıl çalışır?
Aşağıdaki program, bana yanlış görünen çıktılar sağlar.
new A()
_A == null
static A()
new A()
_A == A
kodu:
public class A
{
public static string _A = (new A()).I();
public A()
{
Console.WriteLine("new A()");
if (_A == null)
Console.WriteLine("_A == null");
else
Console.WriteLine("_A == " + _A);
}
static A()
{
Console.WriteLine("static A()");
}
public string I()
{
return "A";
}
}
class Program
{
static void Main(string[] args)
{
var a = new A();
}
}
Dang! Beni ona yen! –
Tüm saygımla ... statik kurucu önce çalışmaz. Statik alan başlatıcısı ilk önce çalışır. – Prankster
A._A'nın yapısı statik yapıcıda gerçekleşir. Derleyici, C# statik yapıcıda bildirilen kodun önündeki tüm alan başlatımlarını statik yapıcıda (.cctor) hazırlar. –