[英]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.