假设我有一些通用interface IMyInterface<TParameter1, TParameter2>
。
现在,如果我正在写另一个类,那么它的参数T
是通用的:
CustomClass<T> where T : IMyInterface
应该怎么做?
(当前代码无法编译,因为IMyInterface
依赖于TParameter, TParameter2
)。
我认为它应该像:
CustomClass<T, TParameter1, TParameter2> where T: IMyInterface<TParameter1,
TParameter2>
但我可能错了,你可以建议我吗?
答案 0 :(得分:4)
与您完全一样,您需要在类中指定TParameter1
和TParameter2
泛型参数,这些参数需要IMyInterface
上的通用约束:
public interface IMyInterface<TParameter1, TParameter2>
{
}
public class CustomClass<T, TParameter1, TParameter2>
where T : IMyInterface<TParameter1, TParameter2>
{
}
或者你可以修复它们:
public class CustomClass<T>
where T : IMyInterface<string, int>
{
}
答案 1 :(得分:0)
您真的想将它用作约束(使用'where'关键字)吗?以下是直接实现的一些示例:
interface ITwoTypes<T1, T2>
class TwoTypes<T1, T2> : ITwoTypes<T1, T2>
或者,如果您知道类将使用的类型,则不需要类上的类型参数:
class StringAndIntClass : ITwoTypes<int, string>
class StringAndSomething<T> : ITwoTypes<string, T>
如果您将接口用作约束并且不知道要显式指定的类型,那么是的,您需要将类型参数添加到类声明中,如您所愿。
class SomethingAndSomethingElse<T, TSomething, TSomethingElse> where T : ITwoTypes<TSomething, TSomethingElse>
class StringAndSomething<T, TSomething> where T : ITwoTypes<string, TSomething>