ECMA公共语言基础设施文档中提到了CIL "isinst类“指令:
正确的CIL确保类是指示类的有效typeref或typeref或类型标记,并且obj始终为null或对象引用。
这意味着不允许使用价值类型,对吗?但是mscorlib.dll包含一个方法System.RuntimeTypeHandle::Equals(object ),其指令如下:
IL_0001: isinst System.RuntimeTypeHandle
System.RuntimeTypeHandle是一种价值类型。有人能把我放在这里吗?
发布于 2010-08-23 22:38:10
看看RuntimeTypeHandle的声明
.class public sequential ansi serializable sealed beforefieldinit RuntimeTypeHandle
extends System.ValueType
implements System.Runtime.Serialization.ISerializable虽然RuntimeTypeHandle被声明为一个结构,但它在CIL中的表示是某种特殊的类。换句话说,您可以将结构想象成继承自System.ValueType的特殊类,其属性遵循严格的顺序。
考虑到这一点,isinst可以在RuntimeTypeHandle中调用。就我所理解的而言,只要有一个代表类型的类,isinst就根本不限于引用类型。
假设我们用C#编写:
var i = 4;
var b = i is Int32;我们会收到编译器警告
警告:给定的表达式总是提供('int')类型的。
会发生什么?我们将4分配给i。i成为int。在下一行中,i将自动装箱到相应的ReferenceType (类),因此警告是显而易见的。我们甚至可以写
var b = i is int;我希望这能有助于在这个问题上的某种分类。
https://stackoverflow.com/questions/3551886
复制相似问题