C#泛型参数

时间:2011-02-02 20:56:14

标签: c# parameters generics

假设我有一些通用interface IMyInterface<TParameter1, TParameter2>

现在,如果我正在写另一个类,那么它的参数T是通用的:

CustomClass<T> where T : IMyInterface

应该怎么做?

(当前代码无法编译,因为IMyInterface依赖于TParameter, TParameter2


我认为它应该像:

CustomClass<T, TParameter1, TParameter2> where T: IMyInterface<TParameter1,
                                                               TParameter2>

但我可能错了,你可以建议我吗?

2 个答案:

答案 0 :(得分:4)

与您完全一样,您需要在类中指定TParameter1TParameter2泛型参数,这些参数需要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>