Quelle classe statique s'initialise en premier si nous avons encore une classe statique dans notre projet?Quelle classe statique est initialisée en premier?
Par exemple: Le code ci-dessous donne une exception nulle.
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());
}
}
Si vous faites attention, vous verrez que si First
classe va s'initialiser si secondArray
champ de Second
serait nulle. Mais si la classe Second
s'initialise en premier, la classe Second
firstArray
sera nulle. J'essaie de dire que ce qui initialise en premier produit des résultats différents. Je pense que c'est une question abstraite à propos de mon projet. Je le rencontre en essayant de comprendre pourquoi je reçois des résultats inattendus.
Est-ce que la garantie norme cet ordre? Ma conjecture était que chaque classe initialise à un certain indéfini avant le premier accès, qui le transforme en un cycle de dépendance qui se résout aléatoirement. –
@Tim: J'ai mis à jour ma réponse - sans constructeur statique, la commande est en effet indéfinie. –
Avec débogueur attaché à VS2005, une mauvaise chose se produit - 'Second.firstArray' est mis à' null' – AakashM