Java使いから見たC#(2) -Enum-
ということで、第二回です。
Javaでも2005年からあるEnumについて。
C#では数値と互換性のある構造体として実装されています。
ですので、こんなコードが書ける。
class MainClass { public static void Main (string[] args) { Days d = (Days)1; //うわぁ・・・・・ } } enum Days {Sun = 0, Mon, Tue, Wed, Thu, Fri, Sat};
うん、書けるだけで絶対に書きません。
ordinalの初期値を指定できるのはJavaと一緒ですね。
Javaだとordinalの初期値を指定出来ませんでした・・・・・
ちなみに、Enumの派生する型を指定できたりもするらしい。組み込み用でしょうか?
enum Days : byte {Sun = 0, Mon, Tue, Wed, Thu, Fri, Sat};
bit演算
JavaではEnumをbit演算用として使用する場合、java.util.EnumSetを使うのが一般的でした。しかし、C#にはbit演算用のクラスは用意されていないようです。
で、どうするかというと、EnumにFlags(もしくはFlagsAttribute)という属性を付けてあげると.netはEnumをbitフラグで管理するようになり、普通のbit演算ができるようになります。
class MainClass { public static void Main (string[] args) { Days d = Days.Sun | Days.Mon; } } [Flags] enum Days {Sun=1, Mon=2, Tue=4, Wed=8, Thu=16, Fri=32, Sat=64}; //値を指定してあげる
すでに定義されているEnumを使用する場合、Enum側を修正しないとbit演算で使用できないというのはちょっとよろしくないかなぁ。
EnumSetぐらいなら実装してしまうのが良いのかもしれない。
Enumへのメソッドの実装
できません。( ー`дー´)キリッ
ので、拡張メソッドを使用します。