【问题标题】:Extending Enumeration Definition in a child class in .NET在 .NET 的子类中扩展枚举定义
【发布时间】:2010-01-04 17:27:58
【问题描述】:

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

基类 - 一些枚举

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

ChildClass1:基类 - 一些枚举 - SomeEnumValue1

ChildClass2:基类 - 一些枚举 - SomeEnumValue2

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

【问题讨论】:

  • 我认为枚举通常倾向于违反 OOP 的原则。除了最简单的数据外,最好避免使用它们,因为它们会迅速增加耦合、降低凝聚力并导致脆弱性。

标签: c# .net vb.net oop


【解决方案1】:

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

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

【讨论】:

  • 我还建议研究使用聚合而不是从基类继承的可能性。
【解决方案2】:

其他人表示这是不可能的。我会在语言的细节上听从他们的意见。这个答案更多的是“因为它不起作用该怎么办。”

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

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

【讨论】:

    【解决方案3】:

    最好的选择是:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      相关资源
      最近更新 更多