Durante mi investigación sobre la mejor manera de construir un Singleton en C# me encontré con el siguiente article donde hay una breve mención que en C++ambigüedad en orden de inicialización de variables estáticas
"La especificación C++ dejó algunas ambigüedad alrededor de la inicialización orden de las variables estáticas. "
terminé mirando a la pregunta y se encontró this y this. Donde básicamente el punto (hasta donde yo entiendo) es que el orden de inicialización de las variables estáticas en C++ no está definido. Ok supongo que hasta ahora tan bueno, pero luego quería entender la siguiente declaración de que el artículo posterior hace
"Afortunadamente, el .NET Framework resuelve esta ambigüedad a través de su manejo de inicialización de variables".
así que encontré this página donde dicen
campo estático inicializadores de variables de una clase corresponden a una secuencia de tareas que se ejecutan en el orden textual en el que aparecen en la clase declaración.
y dar el ejemplo de
using System;
class Test
{
static void Main() {
Console.WriteLine("{0} {1}", B.Y, A.X);
}
public static int F(string s) {
Console.WriteLine(s);
return 1;
}
}
class A
{
static A() {}
public static int X = Test.F("Init A");
}
class B
{
static B() {}
public static int Y = Test.F("Init B");
}
the output must be:
Init B
Init A
1 1
"Debido a que las reglas para cuando constructores estáticos ejecutar (como se define en Sección 10.11) proporcionan que constructor estático de B (y por tanto inicializadores campo estático de B) debe ejecutarse antes del constructor estático de A y inicializadores de campo. "
Pero dónde estoy confundido es que mi entendimiento es que el orden de inicialización de variables estáticas en estos ejemplos se basaría en cuando se invocó por primera vez un método o campo dentro de la clase, que es a su vez basado en la ejecución orden del bloque de código (este caso de izquierda a derecha). IE: completamente independiente de dónde - o el orden - de la declaración de clase. Sin embargo, según mi interpretación de ese artículo, ¿es como resultado del orden de declaración de esas clases, que mis pruebas no respaldan?
¿Podría alguien aclarar esto (y el punto que el artículo está tratando de hacer) para mí y tal vez proporcionar un mejor ejemplo que analfabe el comportamiento descrito?
Muchas gracias por la respuesta extremadamente concisa. –