詳細了解C# 枚舉與位枚舉
一、枚舉的概念:
C# 枚舉(Enum), 枚舉類型是用于聲明一組命名的常數(shù)的基本數(shù)據(jù)類型(值類型);
二、枚舉的定義:
聲明enum變量:
enum <enum_name> {enumeration list};
其中enum_name 指定枚舉的類型名稱; enumeration list 是一個用逗號分隔的標識符列表;
枚舉列表中的每個符號代表一個整數(shù)值,一個比他前面的符號大的整數(shù)值。默認情況下,第一個枚舉符號的值是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 | 將此實例與指定對象進行比較并返回一個對二者的相對值的指示 |
Equals:指示此實例是否等于指定的對象; | |
Format | 根據(jù)指定格式將指定枚舉類型的指定值轉(zhuǎn)換為其等效的字符串表示形式 |
GetName | 在指定枚舉中檢索具有指定值的常數(shù)的名稱 |
GetNames | 檢索指定枚舉中常數(shù)名稱的數(shù)組 |
GetTypeCode | 返回此實例的基礎(chǔ)TypeCode |
GetUnderlyingTye | 返回指定枚舉的基礎(chǔ)類型 |
GetValues | 指定枚舉中常數(shù)值的數(shù)組 |
HasFlag | 確定當前實例中是否設(shè)置了一個或多個位域 |
IsDefined | 返回指定枚舉中是否存在具有指定值的常數(shù)的指示 |
Parse | 將一個或多個枚舉常數(shù)的名稱或數(shù)字值得字符串表示轉(zhuǎn)換成等效得枚舉對象,一個參數(shù)指定該操作是否不區(qū)分大小寫 |
TryParse | 將一個或多個枚舉常數(shù)得名稱或數(shù)字值得字符串表示轉(zhuǎn)換成等效得枚舉對象,用于指示轉(zhuǎn)換是否成功得返回值 |
六、標志枚舉/位枚舉:
C# 標記枚舉(Flags):枚舉類型是用于聲明一組命名得常數(shù)得基本類型數(shù)據(jù)(值類型)。
枚舉值是互斥得。而位標記集合是一種由組合出現(xiàn)得元素形成得列表,通常設(shè)計為以“位或”運算組合新值;
枚舉類型則通常表達一種語義相對獨立得數(shù)值集合。而以枚舉類型來實現(xiàn)位標記集合是最完美得組合,簡稱位枚舉。
七、位枚舉得定義:
///<summary> /// 權(quán)限枚舉 ///</summary> [Flags] public enum permission 注意加了[Flags]特性后有三種寫法, { 一種是使用<<符號, Unknown = 0; // 也可以寫成0x00或0 第二種是0x01, 還有一種是直接寫0,1,2,4,8...., Create = 1<<0, // 0x01或1 一般來說是2的n次方來表示?! ? 注:<<左操作符,表示對這個數(shù)進行移位。 Read = 1<<1, //0x02或2 Update = 1<<2, //0x04或4 Delete = 1<<3 //0x08或8 }
八、位枚舉的實例:
//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; 這時parmission枚舉的值將變成0+1+4=5,它的ToSting()將變成“parmission.Create, parmission.Read”,parmission.Update; 這里我們可以解釋為什么第五個值Delete是8而不能成為5。 也就是說它的值不應(yīng)該是前幾項值的復(fù)合值。一個比較簡單的方法 就是用2的n次方來依次位每一項賦值,例如:1,2,4,8,16,32,64.......。
以上就是詳細了解C# 枚舉與位枚舉的詳細內(nèi)容,更多關(guān)于C# 枚舉與位枚舉的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#對XtraGrid控件實現(xiàn)主從表關(guān)系綁定
這篇文章介紹了C#對XtraGrid控件實現(xiàn)主從表關(guān)系綁定的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06c# 動態(tài)加載dll文件,并實現(xiàn)調(diào)用其中的簡單方法
下面小編就為大家?guī)硪黄猚# 動態(tài)加載dll文件,并實現(xiàn)調(diào)用其中的簡單方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01C#實現(xiàn)簡單獲取及設(shè)置Session類
這篇文章主要介紹了C#實現(xiàn)簡單獲取及設(shè)置Session類,涉及C#針對session的設(shè)置及獲取的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03C#使用迭代器實現(xiàn)文字動態(tài)效果的示例代碼
這篇文章主要為大家詳細介紹了C#如何通過使用迭代器實現(xiàn)文字動態(tài)效果,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02C#先判斷是否存在再創(chuàng)建文件夾或文件與遞歸計算文件夾大小
這篇文章介紹了C#先判斷是否存在再創(chuàng)建文件夾或文件與遞歸計算文件夾大小的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07C#實現(xiàn)自定義windows系統(tǒng)日志的方法
這篇文章主要介紹了C#實現(xiàn)自定義windows系統(tǒng)日志的方法,涉及C#針對windows系統(tǒng)日志的創(chuàng)建、讀寫及刪除技巧,非常具有實用價值,需要的朋友可以參考下2015-08-08C# 對PDF文檔加密、解密(基于Spire.Cloud.SDK for .NET)
這篇文章主要介紹了C# 基于Spire.Cloud.SDK for .NET對PDF文檔進行加密解密,文中講解非常細致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07