Ler em inglês

Compartilhar via


Erro do Compilador CS0425

As restrições para o parâmetro de tipo 'type parameter' do método 'method' devem corresponder às restrições do parâmetro de tipo 'type parameter' do método de interface 'method'. Considere usar uma implementação de interface explícita em vez disso.

Esse erro ocorrerá se um método genérico virtual for substituído em uma classe derivada e as restrições no método na classe derivada não corresponderem às restrições do método na classe base. Para evitar esse erro, verifique se a cláusula where é idêntica em ambas as declarações ou implemente a interface explicitamente.

Exemplo 1

O exemplo a seguir gera o erro 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()  
    {  
    }  
}  

Exemplo 2

As restrições não precisam ser uma correspondência literal, desde que o conjunto de restrições tenha o mesmo significado. Por exemplo, o seguinte é adequado:

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