c#中的抽象枚举

时间:2014-10-14 06:32:19

标签: c# .net inheritance enums abstract

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

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

这不能编译,因为“abstract对此项目无效” 是否有办法实现所期望的行为?

4 个答案:

答案 0 :(得分:6)

  1. 所有枚举必须来自System.Enum
  2. 所有枚举都是值类型,因此密封。
  3. 由于上述这两条规则,无法继承枚举。

答案 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)

没有。 enumenum,而不是class。只有class可以abstract,因为只能继承class。抽象的关键是提供一个将由其他类型继承的公共基础。 enum没有继承任何内容,那么abstract enum如何实施或扩展呢?