0

我正在使用模板。在我的方法中,有一个模板(TBase)依赖于另一个模板(TChild),并且 TBase 和 TChild 都派生自不同的类。

这是代码。

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

我需要告诉 TChild 方法正在实现 IAnotherInterface 或从一个类中派生。但是编译器给了我错误,因为找不到 TChild 类型或命名空间。

我应该把我的第二个放在哪里where

4

2 回答 2

1

你可以只拥有:

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

}

IFF,我们有以下定义:

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

具体来说,它的泛型类型参数ISomeInterface必须是协变的。

否则,正如其他人指出的那样,如果要表达任何类型约束,则需要将(要约束的类型)作为方法的类型参数。

于 2013-08-29T14:31:33.423 回答
0

这将编译:

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

internal interface IAnotherInterface
{
}

internal interface ISomeInterface<TChild>
{
}
于 2013-08-29T14:03:31.567 回答