Ich denke Abschnitt 12.5.1 der Spezifikation, Ausführung der statischen Initialisierer , hat Ihre Antwort. Zitieren der relevanten Bits:
Der statische Initialisierer für die Datei wird beim ersten Zugriff auf einen Wert mit beobachtbarer Initialisierung ausgeführt
und
Alle Definitionen haben eine beobachtbare Initialisierung mit Ausnahme der folgenden Definitionen in Modulen:
Die folgende Liste enthält:
Nicht veränderbare, nicht thread-lokale Werte, die an einen einfachen konstanten Ausdruck gebunden sind
Nach dem Auskommentieren der ersten Zeile von test
wird es zu einem konstanten Ausdruck. Daher löst es keine statische Initialisierung mehr aus.
BEARBEITEN
Die Spezifikation bietet nicht die Begründung für dieses Verhalten, aber es ähnelt C # 's. In diesem Code tritt beispielsweise keine statische Initialisierung auf:
%Vor%Tags und Links f#