詳細(xì)了解C# 枚舉與位枚舉
一、枚舉的概念:
C# 枚舉(Enum), 枚舉類型是用于聲明一組命名的常數(shù)的基本數(shù)據(jù)類型(值類型);
二、枚舉的定義:
聲明enum變量:
enum <enum_name> {enumeration list};
其中enum_name 指定枚舉的類型名稱; enumeration list 是一個(gè)用逗號(hào)分隔的標(biāo)識(shí)符列表;
枚舉列表中的每個(gè)符號(hào)代表一個(gè)整數(shù)值,一個(gè)比他前面的符號(hào)大的整數(shù)值。默認(rèn)情況下,第一個(gè)枚舉符號(hào)的值是0.例如:
enum Days {Sun , Mon, tue, Fir, sat };
三、枚舉的案例,枚舉變量的用法:
using System;
namespace EnumApplication
{
class EnumProgram
{
enum Days { Sun, Mon, tue, Wed, thu, Fri, sat };
static void Main(string[] args)
{
int WeekdayStart = (int)Days.Mon;
int WeekdayEnd = (int)Days.Fir;
Console.WriteLine("Monday:{0}",WeekdayStart);
Console.WriteLine("Firday:{0}",WeekdayEnd );
Console.ReadKey();
}
}
}
四、Enum類:
所有枚舉類型都隱式地繼承System.Enum 類型, System.Enum 類型是繼承自System.ValueType類型唯一不為值類型的引用類型;

五、Enum 類:
| 方法 | 描述 |
| CompareTo | 將此實(shí)例與指定對(duì)象進(jìn)行比較并返回一個(gè)對(duì)二者的相對(duì)值的指示 |
| Equals:指示此實(shí)例是否等于指定的對(duì)象; | |
| Format | 根據(jù)指定格式將指定枚舉類型的指定值轉(zhuǎn)換為其等效的字符串表示形式 |
| GetName | 在指定枚舉中檢索具有指定值的常數(shù)的名稱 |
| GetNames | 檢索指定枚舉中常數(shù)名稱的數(shù)組 |
| GetTypeCode | 返回此實(shí)例的基礎(chǔ)TypeCode |
| GetUnderlyingTye | 返回指定枚舉的基礎(chǔ)類型 |
| GetValues | 指定枚舉中常數(shù)值的數(shù)組 |
| HasFlag | 確定當(dāng)前實(shí)例中是否設(shè)置了一個(gè)或多個(gè)位域 |
| IsDefined | 返回指定枚舉中是否存在具有指定值的常數(shù)的指示 |
| Parse | 將一個(gè)或多個(gè)枚舉常數(shù)的名稱或數(shù)字值得字符串表示轉(zhuǎn)換成等效得枚舉對(duì)象,一個(gè)參數(shù)指定該操作是否不區(qū)分大小寫 |
| TryParse | 將一個(gè)或多個(gè)枚舉常數(shù)得名稱或數(shù)字值得字符串表示轉(zhuǎn)換成等效得枚舉對(duì)象,用于指示轉(zhuǎn)換是否成功得返回值 |
六、標(biāo)志枚舉/位枚舉:
C# 標(biāo)記枚舉(Flags):枚舉類型是用于聲明一組命名得常數(shù)得基本類型數(shù)據(jù)(值類型)。
枚舉值是互斥得。而位標(biāo)記集合是一種由組合出現(xiàn)得元素形成得列表,通常設(shè)計(jì)為以“位或”運(yùn)算組合新值;
枚舉類型則通常表達(dá)一種語(yǔ)義相對(duì)獨(dú)立得數(shù)值集合。而以枚舉類型來(lái)實(shí)現(xiàn)位標(biāo)記集合是最完美得組合,簡(jiǎn)稱位枚舉。
七、位枚舉得定義:
///<summary>
/// 權(quán)限枚舉
///</summary>
[Flags]
public enum permission 注意加了[Flags]特性后有三種寫法,
{ 一種是使用<<符號(hào),
Unknown = 0; // 也可以寫成0x00或0 第二種是0x01,
還有一種是直接寫0,1,2,4,8....,
Create = 1<<0, // 0x01或1 一般來(lái)說(shuō)是2的n次方來(lái)表示?! ?
注:<<左操作符,表示對(duì)這個(gè)數(shù)進(jìn)行移位。
Read = 1<<1, //0x02或2
Update = 1<<2, //0x04或4
Delete = 1<<3 //0x08或8
}
八、位枚舉的實(shí)例:
//1、給用戶創(chuàng)建、讀取,修改和刪除的權(quán)限 var parmission = Permission.Create | parmission.Read | parmission.Update | parmission.Delete; //2、去掉用戶的修改和刪除權(quán)限 parmission = parmission &~parmission.Update; parmission = parmission &~parmission.Delete; //3、給用戶加上修改的權(quán)限 parmission = parmission | parmission.Update; //4、判斷用戶是否有創(chuàng)建的權(quán)限 var isCreate = (parmission & parmission.Create)!=0; //或者 var isCreate = (parmission & parmission.Create)==parmission.Create; 這時(shí)parmission枚舉的值將變成0+1+4=5,它的ToSting()將變成“parmission.Create, parmission.Read”,parmission.Update; 這里我們可以解釋為什么第五個(gè)值Delete是8而不能成為5。 也就是說(shuō)它的值不應(yīng)該是前幾項(xiàng)值的復(fù)合值。一個(gè)比較簡(jiǎn)單的方法 就是用2的n次方來(lái)依次位每一項(xiàng)賦值,例如:1,2,4,8,16,32,64.......。
以上就是詳細(xì)了解C# 枚舉與位枚舉的詳細(xì)內(nèi)容,更多關(guān)于C# 枚舉與位枚舉的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#中調(diào)用Windows API的技術(shù)要點(diǎn)說(shuō)明
本篇文章主要是對(duì)C#中調(diào)用Windows API的技術(shù)要點(diǎn)進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01
C#?網(wǎng)域賬號(hào)(Domain)驗(yàn)證的實(shí)現(xiàn)
本文主要介紹了C#?網(wǎng)域賬號(hào)(Domain)驗(yàn)證的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-04-04
C#中DropDownList動(dòng)態(tài)生成的方法
這篇文章主要介紹了C#中DropDownList動(dòng)態(tài)生成的方法,實(shí)例分析了C#中DropDownList的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-03-03
C# 系統(tǒng)熱鍵注冊(cè)實(shí)現(xiàn)代碼
簡(jiǎn)單點(diǎn)說(shuō)就是為程序制定快捷鍵勒。。很多軟件都帶熱鍵功能的,通過(guò)以下方式可以實(shí)現(xiàn)2個(gè)鍵或3個(gè)鍵的快捷鍵,相當(dāng)之使用,具體實(shí)現(xiàn)方法看后文吧。2009-02-02
C#中自定義高精度Timer定時(shí)器的實(shí)例教程
這篇文章主要介紹了C#中自定義高精度Timer定時(shí)器的實(shí)例教程,多線程的Timer編寫需要注意線程安全的問(wèn)題,需要的朋友可以參考下2016-04-04
如何使用C#修改本地Windows系統(tǒng)時(shí)間
這篇文章主要介紹了如何使用C#修改本地Windows系統(tǒng)時(shí)間,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下2021-01-01

