Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


Błąd kompilatora CS0425

Ograniczenia dla parametru typu "type parameter" metody "method" muszą być zgodne z ograniczeniami dla parametru typu "type parametr" metody interfejsu "method". Rozważ użycie jawnej implementacji interfejsu.

Ten błąd występuje, jeśli wirtualna metoda ogólna jest zastępowana w klasie pochodnej, a ograniczenia metody w klasie pochodnej nie są zgodne z ograniczeniami metody w klasie bazowej. Aby uniknąć tego błędu, upewnij się, że klauzula where jest identyczna w obu deklaracjach lub jawnie zaimplementuj interfejs.

Przykład 1

Poniższy przykład generuje 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()  
    {  
    }  
}  

Przykład 2

Ograniczenia nie muszą być dopasowaniem literału, o ile zestaw ograniczeń ma takie samo znaczenie. Na przykład następujące elementy są w porządku:

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