System::EnumはC/C++の列挙型とは違って、クラス扱い
C/C++のようにInt型で値を列挙しているわけではなく、内部構造はそれなりに複雑。
Systemを継承している事から想像つくとおり、各メンバはObject型となっている。
なのでインデックスなどでint型として使いたい場合はstatic_cast<int>()などで
キャストをする必要がある。
ぶっちゃけC/C++感覚でつかうようなお手軽感はあまり感じないが、
そのかわりに便利なメソッドがあるので一長一短か。
宣言時の数値の割り当て
例えば
enum class Color {
Red,
Green,
Blue,
};
とした場合、それぞれの値をint型にキャストして表示してみると
Red = 0;
Green = 1;
Blue = 2;
となるので、内部的には今までの列挙型のように値が割り当てられると考えてもいいみたい。
…だけど、配列のインデックス値として使ったりしたいのであれば、安全のために
0から値を指定したほうが安全な気がする…。
調べによれば、数値の初期化自体はC/C++と同じ数値が格納されると期待していいみたい。
型指定したい
enum class hoge : short
とかにする
ビットフィールドとして使いたい場合
Enum宣言する前に
[FlagsAttribute]
とすることで、値をビットで扱ってくれる。
例えば
[FlagsAttribute]
enum class Color {
Black = 0,
Red = 1,
Green = 2,
Blue = 4,
};
とすると、0~8の数値をToString()で文字列として表示してみると
0 - Black
1 - Red
2 - Green
3 - Red, Green
4 - Blue
5 - Red, Blue
6 - Green, Blue
7 - Red, Green, Blue
8 - 8
となる
最終更新:2009年05月27日 14:37