代码之家  ›  专栏  ›  技术社区  ›  Achilles

在.NET中的子类中扩展枚举定义

  •  2
  • Achilles  · 技术社区  · 15 年前

    我有一个需要定义枚举的基类:

    基底玻璃 -某人

    然后,我需要从基类创建两个派生类,并扩展枚举中的值:

    ChildClass1:基类 -某人 -某些值1

    子类2:基类 -SomeEnum公司 -某些值2

    在c或vb.net中,有人能提供语法来实现这一点吗?或者如果不可能的话,建议一个替代我正在做的事情的方法?谢谢!

    3 回复  |  直到 15 年前
        1
  •  8
  •   dkackman Srinivas Kokkula    15 年前

    无法扩展枚举中的值列表。枚举在声明和编译时是静态的。

    另一种方法是停止使用枚举,并用其他数据类型或类层次结构替换它。

        2
  •  0
  •   San Jacinto    15 年前

    其他人表示这是不可能的。我将在语言的细节上听从他们的意见。这个答案更像是“既然不起作用,该怎么做”。

    显然,您的选择取决于您的应用程序。我经常看到枚举给任意整数值(而不是使用宏)指定名称和命名范围。如果这是您的用法,您可以选择构建字典(或字典对)来维护这些名称和值的索引。在您的基类中,您将用默认值填充它。在子类中,您以相同的方式添加它。在孙子班中,您以同样的方式添加到它中。在曾孙班,你补充说……

    这样一个系统的开销应该是最小的,因为除了存储整数之外,您只需要散列相对较短的字符串作为名称。与使用编译后的int值比较相比,在运行时确实会受到影响,但是查找应该可以忽略不计,除非您使用的是实时系统(如果您的语言是C)或企业系统。

        3
  •  -1
  •   Blair Conrad    15 年前

    最好的选择是:

    public class ChildClass1
    {
      new public NewEnumValueList SomeEnum
      {
        ..
      }
    }
    

    如果此新属性返回一个全新的枚举值列表,或者如别处所述,请使用状态模式。