c#中的抽象枚举

Mar*_*ark 3 .net c# inheritance enums abstract

有没有办法在C#中创建一个(protected)enum abstract
基类示例:

protected abstract enum commands{}; //CS0106        
protected abstract void useCommands(commands meh);  
Run Code Online (Sandbox Code Playgroud)

这不会编译,因为" abstract对此项无效".
是否有一种工作方式来实现所期望的行为?

Muk*_*und 7

  1. 所有的枚举必须来自 System.Enum
  2. 所有枚举都是值类型,因此是密封的.

由于上述这两个规则,您无法继承枚举.


Dmi*_*nko 6

enum关键字,而不是类名:

  // MyCommand is a class name while 'enum' is a keyword
  public enum MyCommand {
    None,
    Something
  }
Run Code Online (Sandbox Code Playgroud)

所以你的代码应该是

  // Enum (but not enum) is a class name: 
  // Enum is an abstract class for any enum (including MyCommand)
  protected abstract Enum commands {
    get;
  }; 
Run Code Online (Sandbox Code Playgroud)

可能的抽象属性实现可能是:

  protected override Enum commands {
    get { 
      return MyCommand.None;
    }
  }
Run Code Online (Sandbox Code Playgroud)


Sri*_*ram 5

据我了解,您正在尝试制作某种类似于状态机的抽象类。您有一个enum存储命令,希望您的派生类进行定义。

这可以通过使用泛型类并将您enum作为模板类型传递来实现。这是如何实现此目的的示例。

public abstract baseClass <commandType>
{
    protected abstract void useCommands (commandType meh);
    .
    .
    .
}
Run Code Online (Sandbox Code Playgroud)

以后可以派生使用它,如下所示:

public enum commands {stop, wait, go};

public class derivedClass : baseClass <commands>
{
    protected override void useCommands (commands meh)
    {
         .
         .
         .
    }
}
Run Code Online (Sandbox Code Playgroud)