我有一个界面
接口:
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的事情。
感谢您的帮助。
答案 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";
}
}