2015-11-11 2 views
2

У меня есть интерфейс, который использует абстрактную класс в своей сигнатуре. Затем мои реализации используют подкласс абстрактного класса в своей подписи, но это недопустимо. Кто-нибудь может мне помочь? Все, что я могу найти на Googles является общий интерфейс и реализации абстрактного класса ...C# методы автоматического литья интерфейса

public MyAbstractClass { 
    abstract public void myMethod(); 
} 

public MySubClass : MyAbstractClass { 
    override public void myMethod(){ 
     ... 
    } 
} 

И тогда у меня есть интерфейс/реализация ..

public interface MyInterface { 
    MyAbstractClass myInterfaceMethod(MyAbstractClass blah); 
} 

public MyImplementation : MyInterface { 
    MySubClass myInterfaeMethod(MySubClass blah){ 
     ... 
    } 
} 

Но я получаю здание ошибки говоря myInterfaceMethod Безразлично 't реализовать метод интерфейсов ...

Помощь?

ответ

6

Вы не можете этого сделать, поскольку это нарушает интерфейс. Однако вы можете сделать MyInterface общий.

public interface MyInterface<T> where T: MyAbstractClass { 
    T myInterfaceMethod(T blah); 
} 

public MyImplementation : MyInterface<MySubClass> { 
    MySubClass myInterfaeMethod(MySubClass blah){ 
     ... 
    } 
} 
Смежные вопросы