2010-10-19 16 views
7

Ho un'interfacciaImplementare enum in C# Interfaccia e in una delle firma del metodo di interfaccia

Interfaccia:

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

realizzazione concreta:

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; 
    } 
    } 
} 

Quando provo compilazione di questo ho ' IThing.MyEnum 'è una' proprietà 'ma è usata come un' tipo '. Mi manca qualcosa sull'essere in grado di richiedere l'uso dell'Enum nella firma DoAction().

Grazie per qualsiasi aiuto.

+0

Btw, l'errore si verifica nell'interfaccia, non nella realizzazione. – 0bytes

risposta

15

Nell'interfaccia MyEnum è il nome della variabile non il tipo, quindi non verrà riconosciuto dal compilatore. Dovresti essere in grado di usare Generics per fare questo.

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

Poi si potrebbe implementare in questo modo:

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 dovrà essere usato ogni volta che si usa l'interfaccia. –

3

In primo luogo, dichiarare l'enum al di fuori dell'interfaccia/calcestruzzo.

Poi nella vostra interfaccia:

MyEnum SomeNum {get; set;} 

Poi nella classe:

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

Il tuo problema principale era che si stesse cercando di dichiarare un tipo di ritorno di "Enum" dall'interfaccia, quando si dovrebbe dichiarare un tipo di ritorno di "MyEnum".

Ricorda, enum è un tipo. Non è possibile forzare una classe per implementare un "tipo", solo proprietà/metodi.

Detto questo, mi sto grattando la testa per cercare di capire cosa stai cercando di fare.

Problemi correlati