requiere - ¿C#resuelve las dependencias entre los miembros de datos estáticos automáticamente?
static void main c# (2)
Como se dijo antes, la inicialización del campo estático es determinista y va de acuerdo con el orden de declaración textual.
Toma esto, por ejemplo:
class Foo
{
public static string b = a + "def";
public static string a = "abc";
}
Foo.b siempre dará como resultado "def".
Para el caso, cuando hay una dependencia entre campos estáticos, es mejor usar un inicializador estático:
class Foo
{
public static string b;
public static string a;
static Foo()
{
a = "abc";
b = a + "def";
}
}
De esta forma, expresas explícitamente tu preocupación sobre la orden de inicialización; o dependencia para ese asunto (incluso si el compilador no le ayuda si accidentalmente intercambia las instrucciones de inicialización). Lo anterior tendrá los valores esperados almacenados en ayb (respectivamente "abc" y "abcdef").
Sin embargo, las cosas pueden ser complicadas (y específicas de la implementación) para la inicialización de campos estáticos definidos en múltiples clases. La sección 10.4.5.1 Inicialización del campo estático de la especificación del lenguaje habla un poco más.
Si un miembro de datos estáticos depende de otro miembro de datos estáticos, ¿garantiza C # / .NET que el miembro estático dependiente se inicialice antes que el miembro dependiente?
Por ejemplo, tenemos una clase como:
class Foo
{
public static string a = "abc";
public static string b = Foo.a + "def";
}
Cuando se accede a Foo.b , ¿siempre es "abcdef" o puede ser "def"?
Si esto no está garantizado, ¿hay alguna forma mejor de asegurarse de que el miembro dependiente se inicialice primero?
Mostrará siempre "abcdef", porque la inicialización va de arriba hacia abajo en la fuente, hoy al igual que antes.
Todos los miembros estáticos se inicializarán al cargar el classtype que los contiene.