2017-09-05 1 views
0

Disons que j'ai une interface IA, contenant une méthode générique appelée Foo.C# - Contrainte de méthode générique d'interface pour correspondre au type dérivé

public interface IA { 
    int Foo<T>(T otherType); 
} 

Je veux T être du même type que la classe dérivée:

class A : IA { 
    int Foo(A otherType) 
    { 
    } 
} 

J'ai essayé suivante (erreur de syntaxe):

public interface IA { 
    int Foo<T>(T otherType) where T : this; 
} 

Comment ma contrainte besoin de ressembler à pour y arriver?

+0

Ne pensez pas que ce soit possible. L'interface ne sait pas ce qui va l'implémenter. C'est essentiellement la chose poulet/oeuf. – Jamiec

Répondre

7

Vous devez le faire comme ceci:

public interface IA<T> 
{ 
    int Foo(T otherType); 
} 

class A : IA<A> 
{ 
    public int Foo(A otherType) 
    { 
     return 42; 
    } 
} 

Il est la seule façon de faire respecter le type générique de l'élément d'interface.