有人可以向我解释一下 C# 语言的需求吗typeof(SomeGenericType<>
),没有指定具体参数。
我整理了以下示例:
var t1 = typeof(Nullable<>);
var t2 = typeof(Nullable<int>);
var q = 1 as int?;
var b1 = t1.IsInstanceOfType(q); //false
var b2 = t2.IsInstanceOfType(q); //true
我首先想到typeof(Nullable<>)
比“更通用”t2
,它指定通用参数int
, but b1
原来是false
- 所以实例int?
不是以下实例Nullable<>
.
那么变量应该如何定义b1
to be true
?它有什么实际用途?
那么应该如何定义变量才能使 b1 为真呢?
不可以。 (事实上,与Nullable<T>
无论如何,你都会遇到有趣的拳击问题,但我们就这样......)
在执行时,值始终是closed types. Nullable<>
, List<>
are open通用类型。打电话从来没有用IsInstanceOfType
就这样一个类型。但这并不意味着它毫无用处。
通常,开放类型用于反射。例如:
public IList CreateList(Type elementType)
{
Type closedType = typeof(List<>).MakeGenericType(elementType);
return (IList) Activator.CreateInstance(closedType);
}
上面可能有代码is通用,但会调用传入的较低级别Type
取而代之的是值 - 然后列表可以返回堆栈并被转换为IEnumerable<T>
为适当的值T
.
同样,您可能想创建一个带有反射的封闭类型来调用其方法等。
You can also用它来查明特定类型是否实现了通用接口some类型参数 - 对于实现的每个接口,您可以查明它是否是通用的,获取通用类型定义,并查看它是否等于(比如说)IEnumerable<>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)