statische Konstruktoren und BeforeFieldInit?

Wenn für einen Typ kein statischer Konstruktor vorhanden ist, werden die Feldinitialisierer unmittelbar vor der Verwendung des Typs ausgeführt - oder jederzeit nach Lust und Laune der Laufzeit

Warum dieser Code:

void Main()
{ 
  "-------start-------".Dump();
   Test.EchoAndReturn("Hello");
  "-------end-------".Dump();

}

 class Test
{
    public static string x = EchoAndReturn ("a");
    public static string y = EchoAndReturn ("b");
    public static string EchoAndReturn (string s)
    {
        Console.WriteLine (s);
        return s;
    }
}

ergibt:

-------start-------
a
b
Hello
-------end-------

während dieser Code:

void Main()
{ 
  "-------start-------".Dump();
   var test=Test.x;
  "-------end-------".Dump();

}

Ausbeuten

a
b
-------start-------
-------end-------

Die Reihenfolge vona undb ist verstanden. aber warum beschäftigenstatic method istanders alsstatic field.

Ich meine, warum das?Start undEnde Linien sind an verschiedenen Orten mit statischen Methoden vs statischen Feldern? Ich meine - in beiden Situationen muss er diese Felder initialisieren ... also warum?

(Ich weiß, ich kann statische ctor hinzufügen, die es gleich machen - aber ich frage nach dieser besonderen Situation.)

(S. Dump () ist genau wie console.write)

Antworten auf die Frage(3)

Ihre Antwort auf die Frage