0

C# の基本クラスで宣言されている派生型のジェネリック制約を伝播できますか?

サンプルプログラムはエラーを表示します:

型 'T' は、ジェネリック型またはメソッド 'Test.Base' で型パラメーター 'T' として使用できません。'T' から 'Test.IBase' へのボックス変換や型パラメーターの変換はありません。

interface IBase
{

}

class Base<T> where T : IBase
{


}

class Derived<T> : Base<T>
{

}
4

3 に答える 3

4
class Derived<T> : Base<T> where T : IBase
{

}
于 2013-03-27T09:29:59.197 に答える
1

Derived<T>クラスでTは、実装する必要があることを指定していません。IBase型パラメーターとして使用されているため、使用できるとBase<T>は言えませんT。これを次のように変更します。

class Derived<T> : Base<T> where T : IBase
于 2013-03-27T09:30:42.900 に答える
0

次のようにする必要があります。

class Derived<T> : Base<T> where T : IBase
{

}

T は単なる宣言であるため、常に明示的に制約を設定してください。基本クラスのものと同じ T ではありません。

于 2013-03-27T09:30:32.873 に答える