2010-12-10 22 views
5

Lassen Sie uns sagen, dass ich einige grundlegende Schnittstelle haben, die Generika-getrieben ist:C# Generika Frage - generische Schnittstelle Einschränkung

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

Jetzt habe ich einige konkrete Umsetzung dieser Schnittstelle, die auch generisch ist:

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

Das sieht nicht gut aus, aber jetzt lassen Sie uns sagen, dass ich andere Klasse haben:

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

Und lassen Sie uns sagen Ich möchte eine Überprüfung durchführen, wenn TShouldModelInterface tatsächlich eines der möglichen Interface<T> implementiert.

Wenn die Schnittstelle nicht generisch war, würde ich einfach etwas wie where TShouldModelInterface : Interface schreiben.

Aber gibt es eine Möglichkeit, dieses Problem zu lösen, wenn die Schnittstelle ein ist?

+1

Ich änderte Ihren Titel ein wenig, so dass es weniger allgemein ist –

+0

@ Daniel Ahahah .. in der Tat weniger "generic" –

+0

In Ihrem Beispiel '' InterfaceImpl '' nicht implementiert '' Inteface '' (fehlendes "r", BTW). Sie sollten es als '' public class InterfaceImpl : Schnittstelle '' deklarieren –

Antwort

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