コンパイラ エラー CS0425

更新 : 2007 年 11 月

エラー メッセージ

メソッド 'メソッド' の型パラメータ '型パラメータ' に対する制約は、インターフェイス メソッド 'メソッド' の型パラメータ '型パラメータ' に対する制約と一致しなければなりません。明示的なインターフェイスの実装を使用することをお勧めします。

このエラーは、仮想ジェネリック メソッドが派生クラスでオーバーライドされているとき、メソッドに対する制約が派生クラスと基本クラスとで一致しない場合に発生します。このエラーを回避するには、両方の宣言で where 句を統一するか、インターフェイスを明示的に実装します。

使用例

次の例では、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()
    {
    }
}

制約句の意味が一致していればよく、制約名がまったく同じである必要はありません。たとえば、次のような使い方は問題ありません。

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