枚举类型解析
所有的枚举类型都是隐式继承自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
}
{
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.Read | FileType.Write=3
FileTypePro.Read | FileTypePro.Write=Read, Write
0x03=Read, Write
• 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 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