konstruktory statyczne i BeforeFieldInit?
Jeśli typ nie ma konstruktora statycznego, inicjatory pola będą wykonywane tuż przed używanym typem - lub w dowolnym momencie wcześniej na podstawie kaprysu środowiska wykonawczego
Dlaczego ten kod:
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;
}
}
plony:
-------start-------
a
b
Hello
-------end-------
podczas gdy ten kod:
void Main()
{
"-------start-------".Dump();
var test=Test.x;
"-------end-------".Dump();
}
plony
a
b
-------start-------
-------end-------
Kolejnośća
ib
jest zrozumiałe. ale po co sobie radzićstatic method
jestróżne niżstatic field
.
Mam na myśli dlaczegopoczątek ikoniec linie są w różnych miejscach za pomocą metod statycznych vs pola statyczne? To znaczy - w obu sytuacjach musi zainicjować te pola ... więc dlaczego?
(Wiem, że mogę dodać statyczny ctor, który sprawi, że będzie taki sam - ale pytam o tę konkretną sytuację).
(p.s. Dump () jest tak samo jak console.write)