嵌套通用参数

时间:2013-01-30 17:51:42

标签: c# generics generic-programming

可以嵌套像class MyClass<TG<TM>>{}这样的通用参数吗?

我尝试了一些方法并获得了以下代码,但是类声明需要接收分开的两个参数:

class MyClass1<TG, TM>
    where TM : MyType
    where TG : OtherType<TM> {

    public TM DoSomething() {
    }

    public TG DoSomething2() {
    }
}

这是唯一的方法吗?

修改

正如你所看到的,我需要类中的两个泛型参数(使用两者的成员:TM和TG),因此TG是一个通用参数,不能是一个类型(在这种情况下),答案和评论建议我来'硬编码'这两个参数中的一个对这个问题没有贡献。

嗯,通过上面的示例,我们可以像(和工作)一样使用它:

new MyClass<A<B>, B>();

在我的例子中,第二个参数与第一个参数的嵌套参数一样。所以,我问我们是否可以省略第二个参数,编译器会从第一个参数的参数中推断出它。

这样的事情是否可能而不是有两个独立的参数?

1 个答案:

答案 0 :(得分:2)

这取决于你想要达到的目标。如果您希望MyClass1有两个不同的通用参数,那么您展示的代码就是您的选择。

class MyClass<TG<TM>>{}:这实际上意味着MyClass有一个通用参数。您传递的是TG<TM>,这意味着TG也是一个通用类,它接收TM作为其通用参数。

因此,要使该代码有效,您需要以下内容:

class TM {}
class TG<T> {}
class MyClass<T> {}

现在,你可以这样称呼:

new MyClass<TG<TM>>();