.Net是否支持curried的generics?
假设我们有一个嵌套的generics类:
public class A { public class B { } }
这里, typeof(A.B)
本质上是一个具有两个参数的generics类,其中只有第一个被绑定。
如果我有一个带有两个参数的单个类
public class AB { }
有没有办法引用“ AB
与T=int
和U
保持开放”? 如果不是,这是C#限制还是CLR限制?
显然它不能在C#中完成,你必须同时指定两个类型参数,或者不指定。
并且它似乎也不受CLR支持, A
和A
指的是相同的类型:
Type t1 = typeof(A).GetNestedType("B`1"); Type t2 = typeof(A).GetNestedType("B`1"); // t1.Equals(t2) is true
两种类型的封闭类型是A<>
(开放generics类型)
编辑:进一步测试显示typeof(A
实际上是arity 2的generics类型, 而不是 arity 1 … typeof(A
的嵌套generics类型typeof(A
返回一个包含typeof(int)
和 typeof(string)
的数组。 因此typeof(A
实际上等同于(AB)
,这是不受支持的(generics类型不能部分关闭)
这是你的想法吗?
class AB { protected T t; U u; } class C : AB { public void Foo() { t = 5; } }