variable usar son qué metodos metodo los estáticos estaticos cuando clases clase atributos c# static-initializer

c# - usar - Orden de inicialización de campos estáticos en clase estática



variable static c# (3)

dado el siguiente código:

public static class Helpers { private static Char[] myChars = new Char[] {''a'', ''b''}; private static Int32 myCharsSize = myChars.Length; }

¿Se garantiza que myChars se inicializará antes de usar su longitud para asignar myCharsSize ?


A primera vista, no estoy seguro, y tuve que probar esto para ver si incluso se compiló.

Dado eso, inicializaría el valor en un constructor estático.


Hmm ... Me sorprende que compila (lo compruebo). No estoy al tanto de ninguna garantía que lo haga seguro. Usa un constructor estático ...

Editar: Acepto (ver mejor respuesta arriba ) que funcionará; pero mi idea con el código es mantenerlo lo más simple y obvio posible. Si no es obvio que funcionará (y no puede ser si tiene que preguntar), entonces no lo escriba de esa manera ...

En particular, problemas para confiar en el orden de campo:

  • se puede romper si mueves el código (lo que a menudo hago)
  • se puede romper si divide el código en clases partial

Mi consejo sigue siendo: utiliza un constructor estático para este escenario.


Sí, lo harán, consulte 10.4.5.1 Inicialización de campo estático :

Los inicializadores de variable de campo estático de una clase corresponden a una secuencia de asignaciones que se ejecutan en el orden textual en el que aparecen en la declaración de clase. Si existe un constructor estático (Sección 10.11) en la clase, la ejecución de los inicializadores de campo estáticos ocurre inmediatamente antes de ejecutar ese constructor estático. De lo contrario, los inicializadores de campo estáticos se ejecutan en un tiempo dependiente de la implementación antes del primer uso de un campo estático de esa clase.

Dicho esto, creo que sería mejor hacer la inicialización dentro de un inicializador de tipo estático (constructor estático).