在c#接口和接口的方法签名之一中实现枚举

时间:2010-10-19 03:37:06

标签: c# interface enums

我有一个界面

接口:

interface IThing
{
  Enum MyEnum {get;set;}
  string DoAction(MyEnum enumOptionChosen, string valueToPassIn);
}

具体实施:

public class Thing : IThing
{
  public enum MyEnum
  {
    FirstOption,
    SecondOption,
    ThirdOption
  }

  string doAction(MyEnum enumOptionChosen, string valueToPassIn)
  {
    switch(enumOptionChosen)
    {
      case MyEnum.FirstOption:
        x();
        break;
      case MyEnum.SecondOption:
        y();
        break;
      case MyEnum.ThirdOption:
        z();
        break;
    }
  }
}

当我尝试编译时,我得到'IThing.MyEnum'是一个'属性'但是被用作'类型'。 我错过了能够要求在DoAction()签名中使用Enum的事情。

感谢您的帮助。

3 个答案:

答案 0 :(得分:15)

在您的界面中MyEnum是变量的名称而不是类型,因此编译器无法识别它。你应该可以使用泛型来完成这项工作。

public interface IThing<T>
{
   T MyEnum { get; set; }
   string doAction(T enumOptionChosen, string valueToPassIn);
}

然后你可以像这样实现它:

public interface IThing<T>
{
    T MyEnum { get; set; }
    string doAction(T enumOptionChosen, string valueToPassIn);
}

public class Something : IThing<Something.SpecialEnum>
{
    public enum SpecialEnum
    {
        Item1,
        Item2,
        Item3
    }

    public SpecialEnum MyEnum { get; set; }

    public string doAction(SpecialEnum enumOptionChosen, string valueToPassIn)
    {
        return "something";
    }
}

答案 1 :(得分:3)

首先,在界面/具体之外声明你的枚举。

然后在你的界面中:

MyEnum SomeNum {get; set;}

然后在你的课堂上:

public MyEnum SomeNum 
{
   get
   {
     ...
   }
   set
   {
      ...
   }
}

你的主要问题是当你应该声明一个“MyEnum”的返回类型时,你试图从你的界面声明一个返回类型“Enum”。

请记住,枚举是一种类型。您不能强制类实现“类型”,只能实现属性/方法。

话虽这么说,我正试着弄清楚你想要做什么。

答案 2 :(得分:1)

我意识到原帖很老,但这是另一种清晰且运作良好的方法。由于Enum是公共的,因此请继续在具体类界面之外定义它。 (我已经冒昧地将枚举类型重命名为TheEnum,以避免与属性MyEnum混淆。)

public enum TheEnum
{
    FirstOption,
    SecondOption,
    ThirdOption
}

然后在你的界面和具体类中引用它。

public interface IThing
{
    TheEnum MyEnum { get; set; }
    string DoAction(TheEnum enumOptionChosen, string valueToPassIn);
}

public class Thing : IThing
{
    public TheEnum MyEnum { get; set; }

    public string DoAction(TheEnum enumOptionChosen, string valueToPassIn)
    {
        return "Something";
    }
}