“覆盖”枚举的最佳方法是什么?

可能重复:
枚举“inheritance”

我有许多扩展抽象类的类。 抽象父类使用一组值定义枚举。 一些子类inheritance父类的枚举值,但某些子类需要枚举值不同。 有没有办法以某种方式覆盖这些特定子类的枚举,如果没有,什么是实现我所描述的好方法?

class ParentClass { private MyEnum m_EnumVal; public virtual MyEnum EnumVal { get { return m_EnumVal; } set { m_EnumVal = value; } } public enum MyEnum { a, b, c }; } class ChildClass : ParentClass { private MyEnum m_EnumVal; public virtual MyEnum EnumVal { get { return m_EnumVal; } set { m_EnumVal = value; } } public enum MyEnum { d, e, f }; } 

其他答案都是正确的,如果您不拥有或无法修改原始基类或枚举。 如果可以,那么你可以使用类型安全的枚举模式 。 它允许您定义自己的枚举类型,而不是从枚举中派生出来,它们可以执行您希望它们执行的任何操作(包括支持inheritance)。

 public class MyEnum { public static readonly MyEnum A = new MyEnum("A"); public static readonly MyEnum B = new MyEnum("B"); public static readonly MyEnum C = new MyEnum("C"); public override string ToString() { return Value; } protected MyEnum(string value) { this.Value = value; } public string Value { get; private set; } } public sealed class MyDerivedEnum : MyEnum { public static readonly MyDerivedEnum D = new MyDerivedEnum("D"); private MyDerivedEnum(string value) : base(value) { } } class Program { static void Main(string[] args) { MyEnum blah = MyEnum.A; System.Console.WriteLine(blah); blah = MyDerivedEnum.D; System.Console.WriteLine(blah); } } 

一个
d
按任意键继续 。 。 。

类允许您仅覆盖虚方法,而不是覆盖字段/内部类/枚举。 您可以使用new关键字隐藏内部枚举,但任何需要基类枚举的方法都与子类的枚举不兼容。

  class Base { public enum myEnum { hello, to, you } public void doIt(myEnum e) { Console.Out.WriteLine(e); } static void Main(string[] args) { Base a = new Child(); a.doIt(Child.myEnum.hello); // this is a syntax error because doIt requires a Base.myEnum, not a Child.myEnum. } } class Child : Base { public new enum myEnum { hello, my, dear } } 

您可以使用“new”关键字覆盖您在基类中定义的字段。

 class Base { public MyEnum A = MyEnum.Default; } class Derived : Base { public new MyEnum A = MyEnum.Changed; }