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

时间:2010-01-04 17:27:59

标签: c# .net vb.net oop

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

的BaseClass   - SomeEnum

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

ChildClass1:BaseClass   - SomeEnum     - SomeEnumValue1

ChildClass2:BaseClass   - SomeEnum     - SomeEnumValue2

在C#或VB.NET中有人可以提供这样做的语法吗?或者,如果不可能建议替代我正在尝试做的事情?谢谢!

3 个答案:

答案 0 :(得分:8)

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

您的替代方法是停止使用枚举并将其替换为其他一些数据类型或类层次结构。

答案 1 :(得分:0)

其他人表示这是不可能的。我会根据语言的具体情况向他们推荐。这个答案更“做什么,因为它不起作用。”

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

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

答案 2 :(得分:-1)

最好的选择是:

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

如果这个新属性返回一个全新的枚举值列表,或者如其他地方所述,请使用状态模式。