c#中的抽象枚举

有没有办法在C#中制作( protectedenum abstract
基类示例:

 protected abstract enum commands{}; //CS0106 protected abstract void useCommands(commands meh); 

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

  1. 所有枚举必须从System.Enum派生
  2. 所有枚举都是价值类型,因此是密封的。

由于上述这两个规则,您无法inheritance枚举。

enum关键字 ,而不是类名

  // MyCommand is a class name while 'enum' is a keyword public enum MyCommand { None, Something } 

所以你的代码应该是

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

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

  protected override Enum commands { get { return MyCommand.None; } } 

如果我理解你,你试图创建一个类似于State Machine的抽象类。 您有一个enum存储命令,您希望派生类定义这些命令。

这可以通过使用generics类来实现,并将您的enum作为模板化类型传递。 这是一个如何实现这一目标的例子。

 public abstract baseClass  { protected abstract void useCommands (commandType meh); . . . } 

这可以在以后导出使用如下:

 public enum commands {stop, wait, go}; public class derivedClass : baseClass  { protected override void useCommands (commands meh) { . . . } } 

不。 enum是一个enum ,而不是一个class 。 只有一个class可以是abstract因为只能inheritance一个class 。 抽象的要点是提供一个将由其他类型inheritance的公共基础。 enum不会inheritance任何内容,那么如何实现或扩展abstract enum