c#中的抽象枚举

本文关键字:枚举 抽象 | 更新日期: 2023-09-27 18:26:28

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

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

这不会编译,因为"abstract对此项无效"
有没有一种有效的方法来实现期望的行为?

c#中的抽象枚举

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)
    {
         .
         .
         .
    }
}
  1. 所有枚举都必须派生自System.Enum
  2. 所有枚举都是值类型,因此都是密封的

由于以上两条规则,不能继承枚举。

否。enumenum,而不是class。只有class可以是abstract,因为只有class可以被继承。抽象的意义在于提供一个将被其他类型继承的公共基础。enum没有继承任何东西,那么如何实现或扩展abstract enum呢?