2014-10-13 5 views
-2

У меня есть следующий интерфейс:Generic класса с не общим интерфейсом

interface IMyInterface 
{ 
    string Message { set; get; } 
} 

Мой общий класс:

public class MyClass<T> : IMyInterface 
{ 
    public T item; 
    public string Message{ set; get; } 
} 

мне нужно отбрасывать между различными родовыми классами, например:

MyClass<String> myClassString = new MyClass<String>(); 
MyClass<Boolean> myClassBoolean = new MyClass<Boolean>(); 


myClassString = (IMyInterface)myClassBoolean; //This code not working. 
myClassString = (MyClass<String>)(IMyInterface)myClassBoolean // This code working. 

Мой вопрос: почему в первом случае мой код не работает, а во втором случае работает мой код? Каков наилучший способ сделать это?

+3

сообщения об ошибках вы получаете в каждом случае будет точно сказать, почему код ISN Не работаем. – Servy

+3

Второй не приведет к ошибке компилятора, но при запуске литье закончится, поэтому «работа» не является точно точным описанием. –

+0

@mikez Да, но я выполнил следующую операцию: myClassString = (MyClass ) (IMyInterface) myClassBoolean; if (myClassBoolean.Item) myClassString.Item = «Hola»; в этом случае код работает, правильно ?, но какой лучший способ сделать это? – Chiro300

ответ

1

Вы можете отказаться от интерфейса, но общий интерфейс не позволит вам выбирать между типичными типами.

В вашем случае, вы не можете перейти от булева в строку, но вы могли бы сделать это:

IMyInterface x = new MyClass<String>(); 
    IMyInterface y = new MyClass<Boolean>(); 

    x = y; 
Смежные вопросы