2010-10-19 129 views
7

之一,我有一个接口在c#接口实现枚举和接口的方法签名

接口:

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

顺便说一句,在界面发生了错误,而不是在执行。 – 0bytes 2010-10-19 03:38:10

回答

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

不管何时使用接口,都必须使用T. – 2011-12-01 03:59:52

3

首先,声明你的接口/具体外的枚举。

MyEnum SomeNum {get; set;} 
在类

然后:

在你的界面

然后

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

你的主要问题是你想从你的接口声明“枚举”的返回类型,当你应声明返回类型“MyEnum”。

记住,枚举是一种类型。你不能强迫一个类实现一个“类型”,只有属性/方法。

这就是说,我挠我的脑海,试图找出你想要做的。