c#中的抽象枚举
本文关键字:枚举 抽象 | 更新日期: 2023-09-27 18:26:28
有没有办法在C#中生成(protected
)enum
abstract
基类示例:
protected abstract enum commands{}; //CS0106
protected abstract void useCommands(commands meh);
这不会编译,因为"abstract
对此项无效"
有没有一种有效的方法来实现期望的行为?
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;
}
}
如果我理解你的意思,你正在尝试创建一个抽象类,它在某种程度上类似于状态机。您有一个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)
{
.
.
.
}
}
- 所有枚举都必须派生自
System.Enum
- 所有枚举都是值类型,因此都是密封的
由于以上两条规则,不能继承枚举。
否。enum
是enum
,而不是class
。只有class
可以是abstract
,因为只有class
可以被继承。抽象的意义在于提供一个将被其他类型继承的公共基础。enum
没有继承任何东西,那么如何实现或扩展abstract
enum
呢?