所有的枚舉類型都是隱式繼承自System.Enum類型,Enum類型是繼承自System.ValueType類型唯一不為實值型別的參考型別。
public abstract class Enum:ValueType,IComparable,IFormattable,IConvertible
枚舉定義:
enum FileType
{
Txt=1,
Exe,
Meg
}
/// <summary>
/// 為啥WorkType 就可以從int 派生
/// </summary>
enum WorkType : int
{
A,
B
}
為什麼System.Enum是參考型別?
因為所有的枚舉類都隱式繼承System.Enum,所以System.Enum 是參考型別。因為實值型別不能被繼承。
為什麼在ValueType下實現一個Enum?
主要是實現對枚舉類型公用成員與公用方法,任何繼承枚舉類型都自動繼承了Enum中實現的方法。
Enum 類型與枚舉類型的關係?
枚舉類型是實值型別,分配線上程的對戰上,自動繼承System.Enum類型,但是本身不能被繼承;
Enum類型是參考型別,分配在託管堆上,Enum類型本身不是枚舉類型,但是提供了操作枚舉類型的公用方法。
• 枚舉類型用 new 初始化後枚舉值為0
枚舉的值為0
• 枚舉類型支援自增或自減
常用方法
• Enum.GetNames(Enum 類型)
• Enum.GetValues(Enum 類型)
• Enum.IsDefined(Enum ,“”):判斷枚舉中是否包含命名符號
• Enum.
enum Week
{
Mon,
Third
}
enum Name:byte
{
a,
b
}
Console.WriteLine (Enum.GetUnderlyingType(typeof(Week)));
Console.WriteLine (Enum.GetUnderlyingType (typeof(Name)));
輸出結果:
System.Int32
System.Byte
位枚舉
位枚舉一般2的冪來定義。
enum FileType
{
Read=0x01,
Write=0x02
}
[Flags]
enum FileTypePro
{
Read=0x01,
Write=0x02
}
//調用語句
//位標記枚舉
FileType fileType=FileType.Read | FileType.Write ;
Console.WriteLine ("FileType.Read | FileType.Write="+fileType);
FileTypePro fileTypePro=FileTypePro.Read | FileTypePro.Write ;
Console.WriteLine ("FileTypePro.Read | FileTypePro.Write="+fileTypePro);
Console.WriteLine ("0x03="+(FileTypePro)0x03);
輸出:
FileType.Read | FileType.Write=3
FileTypePro.Read | FileTypePro.Write=Read, Write
0x03=Read, Write