2008年3月15日土曜日

[.NET]列挙体をフラグっぽく使う

C/C++では、数値をビット列に見立てて操作することがあります。
たとえばこんな感じ。

WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW


C#では、列挙体の型指定をつけた上で、それらしいことができます。
(値は適当です。)

[Flags]
public enum WNDClass {
    None = 0x00000000,
    Hredraw = 0x00000001,
    Vredraw = 0x00000002,
    foo = 0x00000004,
    bar = 0x00000008,
    WindowClass = Hredraw | Vredraw,
}


引数を渡すときにorすることもできます。

//呼び出し元 引数をorで渡しちゃう
bool result = CreateWindow("abc"WNDClass.Hredraw | WNDClass.Vredraw);


//呼び出し先
public bool CreateWindow(string titleWNDClass cls){
    //・・・処理
    return true;
}


・・・知りませんでした。

0 件のコメント: