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)