Tyl*_*eat 14 c# inheritance enums
可能重复:
枚举"继承"
我有许多扩展抽象类的类.抽象父类使用一组值定义枚举.一些子类继承父类的枚举值,但某些子类需要枚举值不同.有没有办法以某种方式覆盖这些特定子类的枚举,如果没有,什么是实现我所描述的好方法?
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 };
}
Run Code Online (Sandbox Code Playgroud)
Mer*_*ham 18
其他答案都是正确的,如果您不拥有或无法修改原始基类或枚举.如果可以,那么你可以使用类型安全的枚举模式.它允许您定义自己的枚举类型,而不是从枚举中派生出来,它们可以执行您想要的任何操作(包括支持继承).
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);
}
}
Run Code Online (Sandbox Code Playgroud)
A
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
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
41364 次 |
最近记录: |