我正在尝试调用具有类似于以下定义的方法(为避免混淆而进行了简化):
public static void Register<T>(T value) where T : BaseClass, IInterface
只要我有一个定义这两个值的类实例,它就可以正常工作。当我将“BaseClass”传递给一个方法,然后尝试在上述声明中使用该实例时,就会出现问题。例如:
public class MyClass
{
public MyClass(BaseClass value)
{
Register(value);
}
}
我可以将实现 BaseClass 和 IInterface 的类的实例传递到构造函数中,但是当我尝试在Register
方法中使用该值时,我得到一个编译错误说明:
类型“BaseClass”不能用作泛型类型或方法“Register(T)”中的类型参数“T”。没有从“BaseClass”到“IInterface”的隐式引用转换。
如果我像这样更改构造函数中的类型:
public class MyClass
{
public MyClass(IInterface value)
{
Register(value);
}
}
我收到一条错误消息:
类型“IInterface”不能用作泛型类型或方法“Register(T)”中的类型参数“T”。没有从“IInterface”到“BaseClass”的隐式引用转换。
这似乎有点像第 22 条规则。 有没有一种方法可以定义参数以指示它必须同时实现 BaseClass 和 IInterface?