ユーザ用ツール

サイト用ツール


サイドバー

C++/CLI

CLR

実用編

その他

cli:staticコンストラクタ

staticコンストラクタ

ref classやvalue classやinterfaceはそのstaticなメンバーを初期化するためにstaticコンストラクターを定義することができます。ただし以下の制限があります。

  • staticコンストラクタはprivateでなければなりません。
  • staticコンストラクタはランタイムにより自動的に呼ばれます。プログラムから明示的に呼び出すことはできません。

Note:VC++2005のコンパイラはstaticコンストラクタをpublicにすることも、明示的に呼び出すこともできます。しかし、明示的に呼び出しても実際には呼び出されないようです。

  • staticコンストラクタはパラメータ(引数)を持てません。

Note:static initonlyなメンバーは、宣言と同時に初期化するか、staticコンストラクタで初期化しなければなりません。

  • staticコンストラクタで例外が発生するとSystem::TypeInitializationExceptionがスローされます。しかし通常catchすることはできません。
  • 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;
}



/var/www/html/virtual/cppcli/data/pages/cli/staticコンストラクタ.txt · 最終更新: 2013/12/23 09:08 (外部編集)