有没有办法在C#中制作(protected
)enum
abstract
?
基类示例:
protected abstract enum commands{}; //CS0106
protected abstract void useCommands(commands meh);
这不能编译,因为“abstract
对此项目无效”
是否有办法实现所期望的行为?
答案 0 :(得分:6)
System.Enum
由于上述这两条规则,无法继承枚举。
答案 1 :(得分:5)
枚举 是关键字,而不是类名:
// 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;
}
}
答案 2 :(得分:4)
如果我理解你,你试图创建一个类似于状态机的抽象类。您有一个enum
存储命令,您希望派生类定义它们。
这可以通过使用泛型类来实现,并将enum
作为模板类型传递。
以下是如何实现这一目标的一个例子。
public abstract baseClass <commandType>
{
protected abstract void useCommands (commandType meh);
.
.
.
}
以后可以使用以下内容:
public enum commands {stop, wait, go};
public class derivedClass : baseClass <commands>
{
protected override void useCommands (commands meh)
{
.
.
.
}
}
答案 3 :(得分:0)
没有。 enum
是enum
,而不是class
。只有class
可以abstract
,因为只能继承class
。抽象的关键是提供一个将由其他类型继承的公共基础。 enum
没有继承任何内容,那么abstract
enum
如何实施或扩展呢?