.Net是否支持curried的generics?

假设我们有一个嵌套的generics类:

public class A { public class B { } } 

这里, typeof(A.B)本质上是一个具有两个参数的generics类,其中只有第一个被绑定。

如果我有一个带有两个参数的单个类

 public class AB { } 

有没有办法引用“ ABT=intU保持开放”? 如果不是,这是C#限制还是CLR限制?

显然它不能在C#中完成,你必须同时指定两个类型参数,或者不指定。

并且它似乎也不受CLR支持, A.B<>A.B<>指的是相同的类型:

 Type t1 = typeof(A).GetNestedType("B`1"); Type t2 = typeof(A).GetNestedType("B`1"); // t1.Equals(t2) is true 

两种类型的封闭类型是A<> (开放generics类型)

编辑:进一步测试显示typeof(A.B)实际上是arity 2的generics类型, 而不是 arity 1 … typeof(A.B).GetGenericArguments()的嵌套generics类型typeof(A.B).GetGenericArguments()返回一个包含typeof(int) typeof(string)的数组。 因此typeof(A.B<>)实际上等同于(AB) ,这是不受支持的(generics类型不能部分关闭)

这是你的想法吗?

  class AB { protected T t; U u; } class C : AB { public void Foo() { t = 5; } }