c#中的抽象枚举
有没有办法在C#中制作( protected
) enum
abstract
?
基类示例:
protected abstract enum commands{}; //CS0106 protected abstract void useCommands(commands meh);
这不会编译,因为“ abstract
对此项无效”。
是否有一种工作方式来实现所期望的行为?
- 所有枚举必须从
System.Enum
派生 - 所有枚举都是价值类型,因此是密封的。
由于上述这两个规则,您无法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
?