2010-12-10 11 views
5

Disons que j'ai une interface de base qui est générique actionnés par l':C# génériques question - contrainte d'interface générique

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

Maintenant, j'ai une mise en œuvre concrète de cette interface qui est aussi générique:

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

Cela semble OK, mais maintenant disons que j'ai d'autres classes:

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

Et disons Je veux effectuer une vérification si TShouldModelInterface implémente effectivement l'un des Interface<T> possibles.

Si l'interface n'était pas générique, j'écrirais simplement quelque chose comme where TShouldModelInterface : Interface.

Mais est-il possible de résoudre ce problème si l'interface est ?

+1

J'ai modifié votre titre un peu il est moins générique –

+0

Ahahah .. @ Daniel en effet moins « générique » –

+0

Dans votre exemple, « » InterfaceImpl « » ne met pas en œuvre « » Inteface « » (manquant "r", btw). Vous devez le déclarer comme '' classe publique InterfaceImpl : Inteface '' –

Répondre

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