Erreur du compilateur CS0425
Mise à jour : novembre 2007
Message d'erreur
Les contraintes pour le paramètre de type 'paramètre de type' de la méthode 'méthode' doivent correspondre aux contraintes pour le paramètre de type 'paramètre de type' de la méthode d'interface 'méthode'. Si possible, utilisez une implémentation d'interface explicite à la place.
The constraints for type parameter 'type parameter' of method 'method' must match the constraints for type parameter 'type parameter' of interface method 'method'. Consider using an explicit interface implementation instead.
Cette erreur se produit si une méthode générique virtuelle est substituée dans une classe dérivée et que les contraintes de la méthode de la classe dérivée ne correspondent pas à celles de la méthode de la classe de base. Pour éviter cette erreur, assurez-vous que la clause where est identique dans les deux déclarations, ou implémentez l'interface explicitement.
Exemple
L'exemple suivant génère l'erreur CS0425 :
// CS0425.cs
class C1
{
}
class C2
{
}
interface IBase
{
void F<ItemType>(ItemType item) where ItemType : C1;
}
class Derived : IBase
{
public void F<ItemType>(ItemType item) where ItemType : C2 // CS0425
{
}
}
class CMain
{
public static void Main()
{
}
}
Les contraintes ne doivent pas nécessairement être une correspondance littérale, tant que le jeu de contraintes a la même signification. Par exemple, le code suivant est correct :
// CS0425b.cs
interface J<Z>
{
}
interface I<S>
{
void F<T>(S s, T t) where T: J<S>, J<int>;
}
class C : I<int>
{
public void F<X>(int s, X x) where X : J<int>
{
}
public static void Main()
{
}
}