tiene tag significan significado que los haitiana haiti escudo dela cual colores bandera actual .net cil

.net - tag - significado de la bandera y el escudo de haiti



¿Qué hace la bandera de beforefieldinit? (2)

¿Qué hace la bandera de beforefieldinit? Cuando miro el IL de mi clase, veo esta bandera, pero no sé qué está haciendo realmente esta bandera.



Vea mi artículo sobre este mismo tema.

Básicamente, beforefieldinit significa que "el tipo puede inicializarse en cualquier punto antes de que se haga referencia a cualquier campo estático". En teoría, eso significa que puede inicializarse muy lentamente : si llama a un método estático que no toca ningún campo, el JIT no necesita inicializar el tipo.

En la práctica , significa que la clase se inicializa antes de lo que sería de otra manera: está bien que se inicialice al comienzo del primer método que podría usarla. Compare esto con los tipos que no tienen beforefieldinit aplicado en campo, donde la inicialización de tipo tiene que ocurrir inmediatamente antes del primer uso real .

Entonces, supongamos que tenemos:

public static void DoSomething(bool which) { if (which) { FirstType.Foo(); } else { SecondType.Bar(); } }

Si ambos tipos tienen aplicados beforefieldinit campo (que en C # lo hacen de forma predeterminada, a menos que el tipo tenga un constructor estático) entonces ambos se inicializarán al inicio del método (por lo general, no está garantizado). Si no tienen un beforefieldinit , solo uno de ellos se inicializará, según la bandera.

Es por eso que es común usar un constructor estático (¡incluso uno vacío!) Cuando se implementa el patrón de singleton .