枚举类型解析

所有的枚举类型都是隐式继承自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




  
 



 

原文地址:https://www.cnblogs.com/hbb0b0/p/1959324.html