2010-12-10 15 views
5

Powiedzmy mam jakiś podstawowy interfejs, który jest rodzajowych napędzane:C# rodzajowych pytanie - generic ograniczenie interfejs

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

Teraz mam jakąś konkretną implementację tego interfejsu, który jest również ogólna:

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

To wygląda OK, ale teraz powiedzmy, że mam inną klasę:

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

I powiedzmy Chcę wykonać sprawdzenie, czy TShouldModelInterface faktycznie implementuje którykolwiek z możliwych Interface<T>.

Jeśli interfejs nie był ogólny, wystarczy napisać coś w rodzaju where TShouldModelInterface : Interface.

Ale czy istnieje sposób rozwiązania tego problemu, jeśli interfejs jest ?

+1

zmodyfikowałem swój tytuł nieco więc jest mniej rodzajowy –

+0

@Daniel ahahah .. rzeczywiście mniej „rodzajowe” –

+0

W przykładzie „” InterfaceImpl „” nie zrealizować „” inteface „” (brakuje "r", btw). Powinieneś zadeklarować ją jako "publiczną klasę InterfaceImpl : Inteface " ' –

Odpowiedz

8
public class Ololo { 
    public void BadFunction<TShouldModelInterface, T>(TShouldModelInterface shouldModelInterface) 
     where TShouldModelInterface : Interface<T> 
    { 
     // Whatever 
    } 
}