Beforefieldinit bayrağı ne işe yarar? Sınıfımın bilgi düzeyine baktığımda bu bayrağı görüyorum ama bu bayrağın gerçekte ne yaptığını bilmiyorum?
Beforefieldinit bayrağı ne işe yarar? Sınıfımın bilgi düzeyine baktığımda bu bayrağı görüyorum ama bu bayrağın gerçekte ne yaptığını bilmiyorum?
Yanıtlar:
Bkz yazımda bu çok konuda.
Temel olarak, beforefieldinit
"tür, herhangi bir statik alana başvurulmadan önce herhangi bir noktada başlatılabilir" anlamına gelir. Teoride bu, çok tembel olarak başlatılabileceği anlamına gelir - herhangi bir alana dokunmayan statik bir yöntem çağırırsanız, JIT'in türü başlatması gerekmez.
Pratikte bu sınıf var demektir önceki başka türlü olurdu daha - bu ilk yöntemin başlangıcında başlatılması için tamam olabilir kullanabilirsiniz. Bunu kendilerine beforefieldinit
uygulanmamış türlerle karşılaştırın , burada tür başlatmanın ilk gerçek kullanımdan hemen önce gerçekleşmesi gerekir .
Diyelim ki bizde:
public static void DoSomething(bool which)
{
if (which)
{
FirstType.Foo();
}
else
{
SecondType.Bar();
}
}
Her iki tür de beforefieldinit
bunlara uygulanmışsa (bu, türün statik bir kurucusu olmadığı sürece varsayılan olarak C # yaparlar), o zaman ikisi de DoSomething
yöntemin başlangıcında başlatılır (genellikle - garanti edilmez). Eğer yoksa , bayrağa bağlı olarak bunlardan beforefieldinit
sadece biri başlatılacaktır.
Bu nedenle , tekil kalıbı uygularken statik bir kurucu (hatta boş bile!) Kullanmak yaygındır .
4.6'da değişecek gibi görünüyor
beforefieldinit
)?