Quale classe statica viene inizializzata per prima se nel nostro progetto sono presenti altre classi statiche?Quale classe statica viene inizializzata per prima?
Ad esempio: il codice sottostante fornisce un'eccezione nulla.
class Program
{
static void Main(string[] args)
{
First.Write();
Second.Write();
}
}
static class First
{
public static int[] firstArray = new int[20];
public static int[] secondArray = Second.secondArray;
public static void Write()
{
Console.WriteLine(firstArray.ToString());
Console.WriteLine(secondArray.ToString());
}
}
static class Second
{
public static int[] firstArray = First.firstArray;
public static int[] secondArray = new int[30];
public static void Write()
{
Console.WriteLine(firstArray.ToString());
Console.WriteLine(secondArray.ToString());
}
}
Se si presta attenzione, si vedrà che se First
classe sarà l'inizializzazione in modo secondArray
campo della Second
sarebbe nullo. Ma se la classe Second
inizializzasse per prima, allora la classe Second
firstArray
sarebbe nullo. Sto cercando di dire che l'inizializzazione prima produce risultati diversi.
Penso che sia una domanda astratta sul mio progetto. Lo incontro mentre cerco di capire perché sto ottenendo risultati inaspettati.
Fa la garanzia standard di quest'ordine? La mia ipotesi era che ogni classe inizializza ad un certo indefinito prima del primo accesso, il che trasforma questo in un ciclo di dipendenze che viene risolto casualmente. –
@Tim: Ho aggiornato la mia risposta - senza costruttori statici, l'ordine è effettivamente indefinito. –
Con debugger collegato a VS2005, si verifica una cosa brutta - 'Second.firstArray' viene impostato su' null' – AakashM