MSIL实用指南-数据类型转换

一、类的强制转换
1.转换成某个类
用Castclass指令。
实例代码:
ilGenerator.Emit( OpCodes.Castclass , typeof(ClassA) );

2.转换成某个值类型
用Unbox_Any指令。
实例代码:
ilGenerator.Emit( OpCodes.Unbox_Any , typeof(DateTime) );
ilGenerator.Emit( OpCodes.Unbox_Any , typeof(int) );

二、值类型的强制转换

1.转化为sbyte
用Conv_I1指令。

1.转化为sbyte
用Conv_I1指令。

2.转化为short
用Conv_I2指令。

3.转化为int
用Conv_I指令。

4.转化为long
用Conv_I8指令。

5.转化为float
用Conv_R4指令。

6.转化为double
用Conv_R8指令。

7.转化为byte
用Conv_U1指令。

8.转化为ushort
用Conv_U2指令。

9.转化为uint
用Conv_U指令。

10.转化为ulong
用Conv_U8指令。

原文地址:https://www.cnblogs.com/tkt2016/p/8918792.html

时间: 2024-10-09 13:31:54

MSIL实用指南-数据类型转换的相关文章

MSIL实用指南-加载null、string、long、float、double等值

本篇讲述怎么加载null.string值.long值.float值.double值. 加载null不需要参数值,只要 Emit ldnull 其它几个命令要 Emit <指令> <值> 加载null 加载null是很简单的,使用OpCodes.Ldnull,以下一句程序就可以了. ilGenerator.Emit(OpCodes.Ldnull); 加载string值 加载string值也很简单,使用OpCodes.Ldstr,格式是 ilGenerator.Emit(OpCodes

MSIL实用指南-字段的加载和保存

字段有静态字段和非静态字段之分,它们的加载保存指令也是不一样的,并且非静态字段要生成this. 静态字段的加载加载静态字段的指令是Ldsfld.ilGenerator.Emit(OpCodes.Ldsfld, <FieldBuilder>);实际例子 ilGenerator.Emit(OpCodes.Ldsfld, areaFieldBuilder); ilGenerator.Emit(OpCodes.Call, writeStringLineMethod); 静态字段的保存保存静态字段的指令

MSIL实用指南-生成属性

本篇讲解怎么生成属性,包括get和set方法. 第一步,生成一个字段生成字段用TypeBuilder.DefineField方法.实例代码: FieldBuilder customerNameBldr = typeBuilder.DefineField ("_CustomerName",typeof(string),FieldAttributes.Private); 第二步,创建一个PropertyBuilder对象创建PropertyBuilder对象需要用生成字段用方法TypeBu

MSIL实用指南-生成for语句

for语句格式是这样的for(<初始化语句>;<条件语句>;<自增减语句>) <循环体> 它可以转换为while语句 if(<条件语句>){ <初始化语句> while(<条件语句>) { <循环体> <自增减语句> }} 那么就可以按照这while语句生成. 原文地址:https://www.cnblogs.com/tkt2016/p/8807388.html

MSIL实用指南-闭包的生成和调用

闭包(Closure)是词法闭包(Lexical Closure)的简称.对闭包的具体定义有很多种说法,这些说法大体可以分为两类: 一种说法认为闭包是符合一定条件的函数,比如参考资源中这样定义闭包:闭包是在其词法上下文中引用了自由变量(注1)的函数.另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体.比如参考资源中就有这样的的定义:在实现深约束(注2)时,需要创建一个能显式表示引用环境的东西,并将它与相关的子程序捆绑在一起,这样捆绑起来的整体被称为闭包.这两种定义在某种意义上是对立的,

MSIL实用指南-类相关生成

一.创建class用MethodBuilder的DefineType方法,可以指定父类,得到一个TypeBuilder对象. 二.实现继承接口用TypeBuilder的AddInterfaceImplementation方法. 三.显示方法重写用TypeBuilder的DefineMethodOverride方法. 完整代码如下: using System; using System.Reflection; using System.Reflection.Emit; namespace LX1_

Java中数据类型转换

1.Java的数据类型分为三大类 布尔型,字符型和数值型 其中数值型又分为整型和浮点型 2.Java的变量类型 布尔型 boolean 字符型 char 整型    byte,short,int,long 浮点型 float,double 3.数据类型转换 Java中数据类型转换分为三种,简单数据类型转换,字符串与其他类型转换,其他实用数据类型转换 (1)简单数据类型转换 在Java中,整型,实型,字符型被视为简单数据类型. 这些类型级别从低到高:(byte,short,char)-> int

Java中数据类型转换大全(个人总结)

一.字符串转换为其他类型 1.将字符串转化为int型 (1)方法一 int i = Integer.parseInt(String str); (2)方法二 int i = Integer.valueOf(String str).intValue(); 注:Integer.parseInt和 Integer.valueOf 不同,前者生成的是整型,而后者是一个对象,所以要通过intValue()来获得对象的值: 字串转成 Double, Float, Long 的方法大同小异. 2.将字符串转化

Objective-C数据类型、数据类型转换

数据类型 1.Objective-C数据类型可以分为:基本数据类型.对象数据类型和id类型. 2.基本数据类型有:int.float.double和char类型. 3.对象类型就是类或协议所声明的指针类型,例如: NSAutoreleasePool *pool ,其中,NSAutoreleasePool是一个类,NSAutoreleasePool *是它指针类型或叫对象类型. 4.id类型可以表示任何类型,一般只是表示对象类型,不表示基本数据类型,所以刚才的变量可以声明pool也可以声明为id