首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CIL指令"isinst <valuetype>“

CIL指令"isinst <valuetype>“
EN

Stack Overflow用户
提问于 2010-08-23 21:33:07
回答 1查看 843关注 0票数 1

ECMA公共语言基础设施文档中提到了CIL "isinst类“指令:

正确的CIL确保类是指示类的有效typeref或typeref或类型标记,并且obj始终为null或对象引用。

这意味着不允许使用价值类型,对吗?但是mscorlib.dll包含一个方法System.RuntimeTypeHandle::Equals(object ),其指令如下:

IL_0001: isinst System.RuntimeTypeHandle

System.RuntimeTypeHandle是一种价值类型。有人能把我放在这里吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-23 22:38:10

看看RuntimeTypeHandle的声明

代码语言:javascript
复制
.class public sequential ansi serializable sealed beforefieldinit RuntimeTypeHandle
    extends     System.ValueType
    implements  System.Runtime.Serialization.ISerializable

虽然RuntimeTypeHandle被声明为一个结构,但它在CIL中的表示是某种特殊的类。换句话说,您可以将结构想象成继承自System.ValueType的特殊类,其属性遵循严格的顺序。

考虑到这一点,isinst可以在RuntimeTypeHandle中调用。就我所理解的而言,只要有一个代表类型的类,isinst就根本不限于引用类型。

假设我们用C#编写:

代码语言:javascript
复制
var i = 4;
var b = i is Int32;

我们会收到编译器警告

警告:给定的表达式总是提供('int')类型的。

会发生什么?我们将4分配给ii成为int。在下一行中,i将自动装箱到相应的ReferenceType (类),因此警告是显而易见的。我们甚至可以写

代码语言:javascript
复制
var b = i is int;

我希望这能有助于在这个问题上的某种分类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3551886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档