Прочитать на английском

Поделиться через


Ошибка компилятора CS0425

Ограничения для параметра типа "параметр типа" метода "метод" должны соответствовать ограничениям для параметра типа "параметр типа" интерфейсного метода "метод". Попробуйте использовать явную реализацию интерфейса.

Эта ошибка возникает, если виртуальный универсальный метод переопределяется в производном классе и ограничения метода в производном классе не совпадают с ограничениями метода в базовом классе. Чтобы избежать этой ошибки, убедитесь в том, что предложения where в обоих объявлениях идентичны, или реализуйте интерфейс явным образом.

Пример 1

Следующий пример приводит к возникновению ошибки 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()  
    {  
    }  
}  

Пример 2

Ограничения могут совпадать не буквально, так как набор ограничений имеет то же значение. Например, следующий код верен:

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