Wie funktioniert statisches Feld-Initialisierung funktioniert in C#?

Sollten statische Feld-Initialisierung abgeschlossen sein, bevor der Konstruktor aufgerufen wird?

Das folgende Programm liefert eine Ausgabe, die scheint nicht korrekt zu mir.

new A()
_A == null
static A()
new A()
_A == A

Code:

public class A
{
    public static string _A = (new A()).I();

    public A()
    {
        Console.WriteLine("new A()");
        if (_A == null)
            Console.WriteLine("_A == null");
        else
            Console.WriteLine("_A == " + _A);
    }

    static A()
    {
        Console.WriteLine("static A()");
    }

    public string I()
    {
        return "A";
    }
}

class Program
{
    static void Main(string[] args)
    {
       var a = new A();
    }
}
  • FWIW, ich werde erwähnen, dass, wenn man will, zu verzögern einige "statische" Initialisierung bis zu einem bestimmten statisches Feld aufgerufen wird, eine Möglichkeit, dies zu tun (für ein Feld, das ein Referenz-Typ) ist ein privates statisches Feld, die beginnt, die out-null, und dann eine öffentliche, statische getter oder Methode, die die "Initialisierung" nur wenn der Wert null ist, dann setzt privaten Bereich und gibt es zurück.
InformationsquelleAutor Prankster | 2009-04-02
Schreibe einen Kommentar