0

私はテンプレートで作業しています。私のメソッドには、別のテンプレート (TChild) に依存するテンプレート (TBase) があり、TBase と TChild の両方が異なるクラスから派生しています。

これがコードです。

public void SomeMethod<TBase>()
    where TBase : class, ISomeInterface<TChild>, new()
    where TChild : IAnotherInterface   // Problem is here. 

メソッド TChild が IAnotherInterface を実装しているか、クラスから派生していることを伝える必要があります。しかし、TCild 型または名前空間が見つからないため、コンパイラはエラーを返します。

秒針はどこに置くべきかwhere

4

2 に答える 2

1

あなたはただ持つことができます:

public void SomeMethod<TBase>()
where TBase : class, ISomeInterface<IAnotherInterface>, new()
{

}

の場合、次の定義があります。

class Base : ISomeInterface<Child>{}
class Child : IAnotherInterface{}
interface ISomeInterface<out T>{}
interface IAnotherInterface{}

具体的には、ジェネリック型パラメーターで共変ISomeInterfaceでなければなりません。

それ以外の場合、他の人が指摘しているように、型制約を表現したい場合は、メソッドの型パラメーターとして (制約される型) が必要です。

于 2013-08-29T14:31:33.423 に答える