2010-10-19 26 views
7

tengo una interfazImplementar enum en C# interfaz y en una de firma del método de interfaz

Interfaz:

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

aplicación 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; 
    } 
    } 
} 

Cuando intento compilar este recibo el mensaje ' IThing.MyEnum 'es una' propiedad 'pero se usa como un' tipo '. Me falta algo sobre poder requerir el uso de Enum en la firma DoAction().

Gracias por cualquier ayuda.

+0

Por cierto, se produce el error en la interfaz, no en la aplicación. – 0bytes

Respuesta

15

En su interfaz MyEnum es el nombre de la variable, no el tipo, por lo que no será reconocido por el compilador. Debería poder usar genéricos para hacer esto.

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

Posteriormente, se podría aplicar de esta manera:

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 tendrá que usarse siempre que use la interfaz. –

3

En primer lugar, declare su enumeración fuera de la interfaz/concreto.

Luego, en su interfaz:

MyEnum SomeNum {get; set;} 

Luego, en su clase:

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

Su principal problema fue que estaban tratando de declarar un tipo de retorno de "enumeración" de su interfaz, cuando debería declarar un tipo de devolución de "MyEnum".

Recuerde, enum es un tipo. No puede obligar a una clase a implementar un "tipo", solo propiedades/métodos.

Habiendo dicho eso, me estoy rascando la cabeza para tratar de descubrir qué estás tratando de hacer.

Cuestiones relacionadas