2010-12-10 4 views
5

Скажем, у меня есть некоторый базовый интерфейс, который дженериков с приводом:C# дженериков вопрос - общий интерфейс ограничение

public interface Inteface<T> { 
    void Foo(T t); 
} 

Теперь у меня есть некоторые конкретные реализации этого интерфейса, который также является родовым:

public class InterfaceImpl<T> { 
    public void Foo(T t) { 
     // Whatever 
    } 
} 

Это выглядит нормально, но теперь давайте скажем я другой класс:

public class Ololo { 
    public void BadFunction<TShouldModelInterface>(TShouldModelInterface shouldModelInterface) { 
     // Whatever 
    } 
} 

И скажем, Я хочу выполнить проверку, если TShouldModelInterface фактически реализует любой из возможных Interface<T>.

Если интерфейс не был общим, я бы просто написал что-то вроде where TShouldModelInterface : Interface.

Но есть ли способ решить эту проблему, если интерфейс ?

+1

Я изменил свой титул немного, так что это менее общий – 2010-12-10 11:31:50

ответ

8
public class Ololo { 
    public void BadFunction<TShouldModelInterface, T>(TShouldModelInterface shouldModelInterface) 
     where TShouldModelInterface : Interface<T> 
    { 
     // Whatever 
    } 
} 
Смежные вопросы