15枚举

本文详细介绍了C#枚举类型的定义、使用、继承体系、位标志功能及注意事项,包括如何通过位运算进行枚举组合操作,并强调了使用枚举类型相较于使用数字的诸多优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

枚举类型,相对其他类型来说,使用上要简单一些。

枚举类型: 定义了一组“符号名称/值”配对。

internal enum Color{
    White,//0
    Red,//1
    Green,//2
    Bule,//3
    Orange//4
}

使用枚举类型而不是数字,可以使得代码更容易阅读,理解和维护。

使用者定义的枚举类型都是从System.Enum继承,System.Enum继承于System.ValueType,System.ValueType从Object继承而来。从这个继承体系中,可以知道枚举类型是值类型。

要注意的是: 相对于其他值类型而言,枚举类型不允许定义方法,属性和事件。【但是现在可以使用扩展方法来给枚举类型提供方法】

编译枚举类型时,编译器会把每个枚举符号编程成类型的一个常量字段。

可以使用GetUnderlyingType 静态方法【存在于System.Enum】中。或者GetEnumUnderlyingType 实例方法【System.Type中】来返回枚举的值的类型【比如,int,byte…】
其他的一些枚举相关函数大多在System.Enum和System.Type中可以找到【具体查阅MSDN】

说到c#的枚举,提提位标志

可在枚举类型上添加【Flags/FlagsAttribute】位标志。从而方便的进行【&,|】等位相关操作。
例如:

 //[Flags]
 internal enum Actions
 {
        Read  = 0x00000001,
        Write = 0x00000010
 }

//Main
 Actions a = Actions.Read | Actions.Write;
 Console.WriteLine(a);//输出17
 //如果把上面[Flags]注释去掉,输出 Read,Write

也可以不使用Flags,而:

Console.WriteLine(a.ToString("F"));//输出 Read,Write

【个人除了发现输出的不同,加上Flags可以输出符号名称,没有发现其他作用】

但是:

// [Flags]
    internal enum Actions
    {
        Read = 0x00000001,
        Write = 0x00000010,
        Both = 0x00000011
    }

    //Main

    class Program
    {
        static void Main(string[] args)
        {
            Actions a = Actions.Read | Actions.Write;
            Console.WriteLine(a);
            //输出符号名称Both【即使没有Flags标志,也没有使用ToString("F");

        }
    }

在输出时,ToString()会试图将值转为对应的符号,如果没有对应的符号【此时会检查枚举类型是否有Flags/FlagsAttribute标志,如果有,它会将这个数值不会看做单独的值,而是看做一组位的组合,从而输出组合值,如果所有组合试过后】,就会输出数值,如果有,就像本例【可以输出符号】

若用枚举标识位时,最好使用2的幂进行赋值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值