Leer en inglés

Compartir a través de


Error del compilador CS0425

Las restricciones del parámetro de tipo 'type parameter' del método 'method' deben coincidir con las restricciones del parámetro de tipo 'type parameter' del método de interfaz 'method'. Considere la posibilidad de usar una implementación de interfaz explícita en su lugar.

Este error se produce si un método genérico virtual se reemplaza en una clase derivada y las restricciones en el método de la clase derivada no coinciden con las restricciones en el método de la clase base. Para evitar este error, asegúrese de que la cláusula where es idéntica en ambas declaraciones o implemente la interfaz explícitamente.

Ejemplo 1

El ejemplo siguiente genera el error CS0425:

C#
// 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()  
    {  
    }  
}  

Ejemplo 2

Las restricciones no tienen que ser una coincidencia literal, siempre que el conjunto de restricciones tenga el mismo significado. Por ejemplo, el código siguiente es correcto:

C#
// 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()  
    {  
    }  
}