簡體   English   中英

在c#接口和接口的方法簽名之一中實現枚舉

[英]Implement enum in c# Interface and in one of interface's method signature

我有一個界面

接口:

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的東西。

謝謝你的幫助。

在您的界面中, 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";
    }
}

首先,在界面/具體之外聲明你的枚舉。

然后在你的界面中:

MyEnum SomeNum {get; set;}

然后在你的班上:

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

你的主要問題是當你應該聲明返回類型“MyEnum”時,你試圖從你的界面聲明一個返回類型“Enum”。

請記住,枚舉是一種類型。 您不能強制類實現“類型”,只能實現屬性/方法。

話雖這么說,我正試着弄清楚你想要做什么。

我意識到原來的帖子已經很老了,但這是另一種清晰且運作良好的方法。 由於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";
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM