鉴于我有以下几种类型
interface IMyInterface<T> { }
class MyClass<T> : IMyInterface<T> { }
以下5行为什么不会产生相同的结果?
var type1 = typeof(IMyInterface<>);
var type2 = typeof(IMyInterface<object>).GetGenericTypeDefinition();
var type3 = typeof(MyClass<>).GetInterfaces().Single();
var type4 = typeof(MyClass<object>).GetInterfaces().Single().GetGenericTypeDefinition();
var type5 = typeof(MyClass<object>).GetGenericTypeDefinition().GetInterfaces().Single();
type1,type2和type4相同
type3和type5相同
最佳答案
在3和5的情况下,它是不同的类型;它是IMyInterface<SpecificT>
,其中SpecificT
是MyClass<T>
的泛型参数(不是实际的已知值,而是参数本身)-即它是从属的。
这与T
中的完全免费(独立)的IMyInterface<T>
不同,后者是1、2和4提供的。
如果重命名Ts,它将变得更加明显:
interface IMyInterface<TA> { }
class MyClass<TB> : IMyInterface<TB> { }
现在针对每个检查
.GetGenericArguments().Single().Name
。对于1、2和4,它是TA
。对于3和5,它是TB
。关于c# - GetGenericTypeDefinition返回不同的类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23803939/