zoukankan      html  css  js  c++  java
  • C#枚举位运算

    Enumeration Types as Bit Flags

    You can use an enumeration type to define bit flags, which enables an instance of the enumeration type to store any combination of the values that are defined in the enumerator list. (Of course, some combinations may not be meaningful or allowed in your program code.)

    You create a bit flags enum by applying the System.FlagsAttribute attribute and defining the values appropriately so that AND, OR, NOT and XOR bitwise operations can be performed on them. In a bit flags enum, include a named constant with a value of zero that means "no flags are set." Do not give a flag a value of zero if it does not mean "no flags are set".

    In the following example, another version of the Days enum, which is named Days2, is defined. Days2 has the Flags attribute and each value is assigned the next greater power of 2. This enables you to create a Days2 variable whose value is Days2.Tuesday and Days2.Thursday.

        [Flags]
        enum Days2
        {
            None = 0x0,
            Sunday = 0x1,
            Monday = 0x2,
            Tuesday = 0x4,
            Wednesday = 0x8,
            Thursday = 0x10,
            Friday = 0x20,
            Saturday = 0x40
        }
        class MyClass
        {
            Days2 meetingDays = Days2.Tuesday | Days2.Thursday;
        }



    To set a flag on an enum, use the bitwise OR operator as shown in the following example:

    // Initialize with two flags using bitwise OR.
    meetingDays = Days2.Tuesday | Days2.Thursday;

    // Set an additional flag using bitwise OR.
    meetingDays = meetingDays | Days2.Friday;

    Console.WriteLine("Meeting days are {0}", meetingDays);
    // Output: Meeting days are Tuesday, Thursday, Friday

    // Remove a flag using bitwise XOR.
    meetingDays = meetingDays ^ Days2.Tuesday;
    Console.WriteLine("Meeting days are {0}", meetingDays);
    // Output: Meeting days are Thursday, Friday


    To determine whether a specific flag is set, use a bitwise AND operation, as shown in the following example:

    // Test value of flags using bitwise AND.
    bool test = (meetingDays & Days2.Thursday) == Days2.Thursday;
    Console.WriteLine("Thursday {0} a meeting day.", test == true ? "is" : "is not");
    // Output: Thursday is a meeting day.
    
    
    

    For more information about what to consider when you define enumeration types with the System.FlagsAttribute attribute, see System.Enum.

    All enums are instances of the System.Enum type. You cannot derive new classes from System.Enum, but you can use its methods to discover information about and manipulate values in an enum instance.

    string s = Enum.GetName(typeof(Days), 4);
    Console.WriteLine(s);
    
    Console.WriteLine("The values of the Days Enum are:");
    foreach (int i in Enum.GetValues(typeof(Days)))
        Console.WriteLine(i);
    
    Console.WriteLine("The names of the Days Enum are:");
    foreach (string str in Enum.GetNames(typeof(Days)))
        Console.WriteLine(str);
    
    
    

    For more information, see System.Enum.

    You can also create a new method for an enum by using an extension method. For more information, see How to: Create a New Method for an Enumeration (C# Programming Guide).

    http://msdn.microsoft.com/en-us/library/cc138362.aspx

  • 相关阅读:
    命令实现linux和客户端文件上传下载
    python--linux上如何执行shell命令
    Eureka系列(一)Eureka功能介绍
    Eureka系列(七) 服务下线Server端具体实现
    编译时多态 与 运行时多态
    静态绑定(前期绑定) 与 动态绑定(后期绑定)
    重载 与 重写
    热点检测、方法内联、动态反优化
    数据库日志
    单例模式
  • 原文地址:https://www.cnblogs.com/Langzi127/p/1970671.html
Copyright © 2011-2022 走看看