ref classやvalue classやinterfaceはそのstaticなメンバーを初期化するためにstaticコンストラクターを定義することができます。ただし以下の制限があります。
Note:VC++2005のコンパイラはstaticコンストラクタをpublicにすることも、明示的に呼び出すこともできます。しかし、明示的に呼び出しても実際には呼び出されないようです。
Note:static initonlyなメンバーは、宣言と同時に初期化するか、staticコンストラクタで初期化しなければなりません。
using namespace System; ref class A { public: static int a_; static A() { a_ += 10; } }; ref class B { public: static int b_; static B() { // a_ += 10; // error b_ += 10; } }; ref class C { public: static int c_ = 100; static C() { c_ = 10; } }; ref class D { public: static D() { Console::WriteLine(L"D is called"); } }; int main() { Console::WriteLine(A::a_); A::A(); Console::WriteLine(A::a_); Console::WriteLine(B::b_); Console::WriteLine(C::c_); System::Type^ t = D::typeid; Console::WriteLine(t->ToString()); return 0; }