亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 885 | 回復(fù): 0
打印 上一主題 下一主題

FlagsAttribute屬性在enum中的應(yīng)用 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-12-21 08:41 |只看該作者 |倒序瀏覽
http://www.cnblogs.com/aiyagaze/archive/2006/09/16/505595.html

.Net C#中枚舉的聲明格式如下所示:
[attributes] [modifiers] enum identifier [:base-type] {enumerator-list} [;]

     FlagsAttribute屬性就是枚舉類型的一項可選屬性。它的主要作用是可以將枚舉作為位域處理(P.S. C#不支持位域)。所謂位域是單個存儲單元內(nèi)相鄰二進(jìn)制位的集合。通過為枚舉添加這個屬性,可以改變枚舉的一些行為來滿足我們的需要。

     我們聲明這樣一個枚舉,并執(zhí)行如下語句:

enum MyFlags { Flag1, Flag2, Flag3, Flag4};

MyFlags myFlag 
= MyFlags.Flag2 | MyFlags.Flag3;

Console.WriteLine(myFlag);

     得到的結(jié)果是:

Flag4

     因為對于整數(shù)來說,|操作就是將其轉(zhuǎn)化為二進(jìn)制再進(jìn)行或運(yùn)算。Flags.Flag2 | Flags.Flag3做的工作實際上是 0001 | 0010 = 0011 = 3再轉(zhuǎn)換成(MyFlags)3就是Flag4了

     而如果將枚舉聲明為:

[FlagsAttribute]
enum MyFlags{
     Flag1 
= 0,    //000
     Flag2 = 1,    //001
     Flag3 = 2,    //010
     Flag4 = 4     //100
}
;

     則上述程序的結(jié)果為:

Flag2,Flag3

     這樣做的意義在于我們可以實現(xiàn)“或”的關(guān)系

     就上例而言,myFlag可以更直觀的表現(xiàn)為011,因此當(dāng)我們想要檢驗它滿足哪個枚舉值時我們可以使用&操作

if((myFlag & MyFlags.Flag2) == MyFlags.Flag2)
{
     Console.WriteLine(
"true");
}

if((myFlag & MyFlags.Flag3) == MyFlags.Flag3)

{
     Console.WriteLine(
"true");
}

     011&001 = 001,011&010 = 010,因此這兩個if都會成立,這就是這種枚舉的意義吧。另外我們應(yīng)當(dāng)注意默認(rèn)初始化的myFlag的值為0,與其作&運(yùn)算不會有任何結(jié)果。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP