C++/CLIでの定数の定義

クラスのメンバに定数を、すなわちpublicでstaticでconstな値を定義するとします。C++的な考えでC++/CLIで定義してみるとこうなるでしょう。

public ref class Const abstract sealed
{
public:
    static const Int32 HOGE = 123;
};

しかしこれをC#側から定義を見てみると、以下のようにconstが取れてしまっています。MSILにコンパイルする時点で取れてしまうようです。

public static class Const
{
    public static int HOGE;
};


これでは簡単に Const.HOGE = 0; のように書き換えできてしまって非常にまずいです。そこで、最善なのかはわかりませんが現状での解決策はこちら。

public ref class Const abstract sealed
{
public:
    static initonly Int32 HOGE = 123;
};

こうすると、C#からはこう見えます。

public static class Const
{
    public static readonly int HOGE;
}

C#のconstとreadonlyは微妙に違うんですが、とりあえずこれで書き換えはできないのでいいことにします。

追記

id:Schima:20090311