c#如何编写返回枚举的抽象方法

时间:2017-08-02 08:42:38

标签: c# enums abstract

我有一个基类,从中派生出几个类。

我想将基类中的枚举声明为抽象,并且从中派生的每个类都必须创建自己的不同枚举。

我该怎么做?

我尝试了以下方法:在基类中声明一个返回枚举类型的抽象方法,每个实现它的类都将返回自己的枚举:

public abstract enum RunAtOptions();

但我收到编译错误

"The modifier abstract is not valid for this item"

2 个答案:

答案 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
}