我有一个基类,从中派生出几个类。
我想将基类中的枚举声明为抽象,并且从中派生的每个类都必须创建自己的不同枚举。
我该怎么做?
我尝试了以下方法:在基类中声明一个返回枚举类型的抽象方法,每个实现它的类都将返回自己的枚举:
public abstract enum RunAtOptions();
但我收到编译错误
"The modifier abstract is not valid for this item"
答案 0 :(得分:5)
您需要返回实际枚举而非enum
关键字,以便enum
MyEnumType
如下:
public enum MyEnumType
{
ValueOne = 0,
ValueTwo = 1
}
public abstract MyEnumType RunAtOptions();
如果你想修改它以使用泛型,你可以让方法返回T
并有一个约束来使T
成为一个结构:
public abstract T RunAtOptions() where T : struct;
C#没有通用限制来支持枚举类型。
答案 1 :(得分:1)
您不能将enum关键字用作抽象成员。 Similar question
或者,您可以引入抽象字典属性。
public class Base
{
public abstract Dictionary<string, int> RunAtOptions { get; }
}
派生类可以在构造函数中设置属性。
public class Derived : Base
{
public override Dictionary<string, int> RunAtOptions { get; }
public Derived()
{
RunAtOptions = new Dictionary<string, int>
{
["Option1"] = 1,
["Option2"] = 2
}
}
}
不幸的是,使用这种方法不会给你优雅的编译时检查。使用此字典,您可以将选项值与字典中的条目进行比较,如下所示:
if (someObject.Options == RunAtOptions["Option1"]) // someObject.Options is of type `int`
{
// Do something
}