zoukankan      html  css  js  c++  java
  • 第十五章 枚举类型和位标志

    目录:

    15.1 枚举类型和位标志

    15.2 位标志

    15.3 向枚举类型添加方法

    15.1 枚举类型和位标志

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

    枚举类型使程序更容易编写,阅读和维护。

    枚举类型时强类型的。

    枚举类型从System.Enum派生,是值类型,可用未装箱和已装箱的形式来表示。但不能定义任何方法,属性或事件。可利用C#的“扩展方法“功能模拟向枚举类型添加方法。

    编译枚举类型时,C#编译器把每个符号转换成类型的一个常量字段。简单地说,枚举类型只是一个结构,其中定义了一组常量字段和一个实例字段。产量字段会嵌入程序集的元数据中,并可通过反射来范文。这意味者可以在运行时获得与枚举类型关联的所有符合及其值。还意味着可以将字符串符号转换成对应的数值。

    15.2 位标志

    经常需要枚举类型表示一组可以组合的位标志。枚举类型表示单个数值,而位标识表示集合,其中一些位于on状态,一些处于off状态。(进制1代表“on”,二进制0代表“off”)

    定义用于标识位标志的枚举类型时,当然应该显示为每个符号分配一个数值。每个符号都有单独的一个处于on状态。此外,经常都要定义一个值为0的None符号。

    应用了【Flags】特性,Tostring方法的工作过程:

    1.获取枚举类型定义的数值集合,降序排列这些数值。

    2.每个数值都和枚举实例中的值进行“按位与”计算,假如结果等于数值,与该数值关联的字符串就附加到输出字符串上,对应的位会被认为已经考虑过了,会被关闭(设为0)。这一步不断重复,直到检查完所有数值,或直到枚举实例的所有位都被关闭。

    3.检查完所有数值后,如果枚举实例仍不为0,表明枚举实例中一些处于on状态的位不对应任何已定义的符号。在这种情况下,ToString将枚举实例中的原始数值作为字符串返回。

    4.如果枚举实例原始值不为0,返回符号之间以逗号分隔的字符串。

    5.如果枚举实例原始值为0,而枚举类型定义的一个符号对应的值是0值,就返回这个符号。

    6.如果到达这一步,就返回0

    Parse和TryParse方法在调用时,会在内部执行以下动作:

    1.删除字符串头尾所有空白字符。

    2.如果字符串第一个字符时数字,加号(+)或减号(-),该字符串会被认为是一个数字,方法返回一个枚举类型实例,其数值等于字符串转换后的数值。

    3.传递的字符串被分解为一组以逗号分隔的token,每个token的空白字符串都被删除。

    4.在枚举类型的已定义符号中查找每个token字符串。如果没有找到相应的符号,Parse会抛出System.ArgumentException异常;TryParse返回false。如果找到符号,就将它对应的输账号与当前的一个动态结果进行“按位或”计算,在查找下一个符号。

    5.查找并找到了所有标记之后,返回这个动态结果。

    15.3 向枚举类型添加方法

    可利用C#的扩展方法功能模拟向枚举类型添加方法。

    每天学习一丢丢
  • 相关阅读:
    verilog之计数器0~9999——数码管显示
    C语言的谜题
    modelsim SE6.2b的常用问题
    [转载]MDK常见报错(编译arm)
    Nios II之LED实验(SDRAM+EPCS4配置)————基于Altera的DE0开发板
    poj2210
    poj1161
    poj1555
    poj2337
    poj1107
  • 原文地址:https://www.cnblogs.com/terry-1/p/10133693.html
Copyright © 2011-2022 走看看