
.NET Emit 入门教程系列
文章平均质量分 90
路过秋天-博客园
欢迎关注微信公众号:路过秋天的世界(微信名:lgqtdsj),个人简介:路过秋天,十八年以上工作经验,擅长的领域是.NET,泛多种其它语言。爱好多且无,曾经年轻,幽默过,非要有一句座右铭,那就:悍汗的人生,是需要多运动的。
展开
-
.NET Emit 入门教程:第六部分:IL 指令:9:详解 ILGenerator 指令方法:运算操作指令(指令篇结束)
在.NET Emit 编程中,运算操作指令是一类关键的IL(Intermediate Language)指令,用于在动态生成的代码中执行各种数学运算、位操作和比较操作。这些指令允许开发人员对操作数进行加法、减法、乘法、除法、逻辑与、逻辑或、逻辑非、位与、位或、位异或、左移、右移以及比较等操作。通过运算操作指令,开发人员能够在动态生成的代码中实现各种算术运算、逻辑运算和位操作,从而更灵活地处理数据和实现复杂的逻辑。这些指令为动态代码生成提供了强大的功能,使得开发人员能够根据需要生成高效且功能丰富的代码。原创 2024-04-24 14:47:07 · 1260 阅读 · 0 评论 -
.NET Emit 入门教程:第六部分:IL 指令:8:详解 ILGenerator 指令方法:类型转换指令
在.NET中,类型转换是一个常见的操作,它允许我们在不同的数据类型之间进行转换。ILGenerator 提供了一系列的指令来执行各种类型转换操作。这些指令可以分为三类:强制类型转换指令、隐式类型转换指令和数值类型转换指令。强制类型转换指令:这些指令用于执行显式的类型转换操作,如果转换失败则会抛出异常。常见的强制类型转换指令包括castclass和 isinst 指令。隐式类型转换指令:这些指令用于执行从引用类型到值类型或者从值类型到引用类型的转换,或者在值类型之间执行转换。unbox和box。原创 2024-04-19 10:00:24 · 549 阅读 · 0 评论 -
.NET Emit 入门教程:第六部分:IL 指令:7:详解 ILGenerator 指令方法:分支条件指令
分支条件指令是在.NET Emit编程中关键的控制流程工具,用于在IL代码中实现条件判断和控制转移。ILGenerator 类提供了一系列方法,用于生成这些分支条件指令,包括条件分支、无条件分支和Switch分支等。条件分支指令(如brtrue和brfalse)根据栈顶的布尔值决定是否跳转到目标标签,而无条件分支指令(如br)则总是进行跳转。Switch分支指令则用于在多个目标中选择一个跳转。通过比较指令(如ceq、cgt和clt),还可以进行数值比较并根据比较结果执行相应的跳转操作。原创 2024-04-15 10:02:19 · 1304 阅读 · 0 评论 -
.NET Emit 入门教程:第六部分:IL 指令:6:详解 ILGenerator 指令方法:方法调用指令
在.NET Emit 中,方法调用指令是一种关键的操作,它允许我们在运行时动态地调用各种方法。这些指令提供了一种灵活的方式,可以在程序执行期间创建、修改和调用方法,从而实现了动态代码生成和操作的功能。方法调用指令包括了一系列不同的操作码,每个操作码都代表了一种不同的调用方式,比如调用实例方法、静态方法或委托。通过理解和应用这些方法调用指令,我们可以实现诸如动态代理、AOP(面向切面编程)、方法重写等高级功能,从而扩展了.NET平台的能力和灵活性。原创 2024-04-11 09:40:49 · 790 阅读 · 0 评论 -
.NET Emit 入门教程:第六部分:IL 指令:5:详解 ILGenerator 指令方法:创建实例指令
在.NET Emit 中,使用 ILGenerator 创建实例是一项重要的操作,它允许我们动态生成对象实例和数组实例的代码。通过创建实例指令,我们可以在运行时动态生成并初始化对象,为程序提供更大的灵活性和可扩展性。创建实例指令主要包括 Newobj 指令和 Newarr 指令。Newobj 指令用于创建新的对象实例,而 Newarr 指令则用于创建新的数组实例。这些指令的灵活运用可以帮助我们在运行时动态地生成各种类型的实例,满足不同场景下的需求。原创 2024-04-10 09:42:37 · 1038 阅读 · 0 评论 -
.NET Emit 入门教程:第六部分:IL 指令:4:详解 ILGenerator 指令方法:参数存储指令
在 IL 中,除了参数存储指令starg和stloc之外,还有其他一些以 "st" 开头的指令,如stfld和stsfld,它们也用于存储值到特定位置。:将计算堆栈顶部的值存储到方法的参数中,参数索引由后续字节指定。:将计算堆栈顶部的值存储到方法的局部变量中,局部变量索引由后续字节指定。:将计算堆栈顶部的值存储到对象的字段中,字段由元数据标识指定。:用于将值存储到静态字段(static field)中。静态字段是属于类本身而不是类的实例的字段,它们在整个应用程序生命周期内只有一份拷贝,被所有实例共享。原创 2024-04-09 13:44:12 · 1197 阅读 · 0 评论 -
.NET Emit 入门教程:第六部分:IL 指令:3:详解 ILGenerator 指令方法:参数加载指令
在上一篇中,我们介绍了 ILGenerator 辅助方法。本篇,将详细介绍指令方法,并详细介绍指令的相关用法。在接下来的教程,关于IL指令部分,会将指令分为以下几个分类进行讲解:1、参数加载指令:ld 开头的指令,单词为:load argument2、参数存储指令:st 开头的指令,单词为:store3、创建实例指令: new 开头的指令。4、方法调用指令:call 开头的指令。5、分支条件指令:br 开头的指令,单词为 break。原创 2024-04-08 14:10:46 · 960 阅读 · 0 评论 -
.NET Emit 入门教程:第六部分:IL 指令:2:详解 ILGenerator 辅助方法
ILGenerator 是.NET 中的一个重要组件,用于动态生成 Intermediate Language(IL)代码。通过ILGenerator,开发人员可以在运行时创建和修改方法体内的IL指令,实现动态方法的生成和优化。ILGenerator 提供了一组方法,允许程序员发出各种IL指令,包括加载、存储、运算、流程控制等操作,从而实现对方法体逻辑的灵活控制。在 .NET 开发中,ILGenerator 通常与 DynamicMethod 类结合使用。原创 2024-04-03 13:43:12 · 928 阅读 · 0 评论 -
.NET Emit 入门教程:第六部分:IL 指令:1:概要介绍
在.NET平台上,IL(Intermediate Language)是一种中间语言,也称为MSIL(Microsoft Intermediate Language)或CIL(Common Intermediate Language)。它是由高级语言(如C#、VB.NET等)编译而成的一种低级语言表示形式。IL 代码被保存在 .net 程序集中,并由公共语言运行时(CLR)执行。.NET平台定义了一套丰富的IL指令集,涵盖了各种常见的操作和计算需求。原创 2024-04-03 13:40:06 · 1129 阅读 · 0 评论 -
.NET Emit 入门教程:第五部分:动态生成方法(MethodBuilder 与 DynamicMethod)
当我们涉及到在运行时生成和定义方法时,便需要使用到C#中的两个关键类之一:MethodBuilder或DynamicMethod。这两者都属于反射(Reflection.Emit)的一部分,允许我们以动态的方式创建方法。两者各有侧重,使用方式大体相同,本篇文章我们先介绍 MethodBuilder,再介绍 DynamicMethod,最后再总结两者的区别。原创 2024-04-02 16:07:50 · 672 阅读 · 0 评论 -
.NET Emit 入门教程:第四部分:构建类型(Type)
通过学习本系列之前的文章,我们可以轻松定义 AssemblyBuilder 程序集构建器,再通过程序集构建器,定义 ModuleBuilder 模块构建器。下面我们先通过定义公用代码来生成程序集,以便更好的通过反编绎,来观察对照我们生成的代码。//...今天的示例代码存放地注意标红的部分为 .NET 版本代码,正如本系列之前文件所说,只有 .NET 版本支持程序集持久化,.NET Core 需要到9版本才支持。原创 2024-03-29 10:59:03 · 1015 阅读 · 0 评论 -
.NET Emit 入门教程:第三部分:构建模块(Module)
在这一部分中,我们将深入讨论动态程序集中模块的概念以及如何构建和管理模块。原创 2024-03-22 14:29:23 · 1505 阅读 · 0 评论 -
.NET Emit 入门教程:第二部分:构建静态程序集(下)
在本章节中,我们讨论了如何使用 C# Emit 来构建动态程序集,以获得 AssemblyBuilder 这个程序集构建器,开启构建程序集的第一步。同时我们也讨论了如何使用 C# Emit 来构建动态程序集以及程序集的持久化。同时还分享了自己的干货,如何使用 CodeDom 和 Roslyn 来构建静态程序集。通过本章节的内容,读者可以掌握如何利用 C# Emit 技术构建动态程序集和静态程序集,从而实现灵活、动态的程序设计和开发。原创 2024-03-21 14:32:39 · 1126 阅读 · 0 评论 -
.NET Emit 入门教程:第二部分:构建动态程序集
在本章节中,我们讨论了如何使用 C# Emit 来构建动态程序集,以获得 AssemblyBuilder 这个程序集构建器,开启构建程序集的第一步。在之后的文章,我们会讲解如何用它的 DefineDynamicModule 来定义模块,以之后构建类、成员、方法等,来实现构建完整的程序集。当然,对于构建动态程序集,本文章到此会显的有点简单,为了避免被大伙说文章太水。于是,打算追加一下对于构建静态程序集(即持久化程序集)的相关知识。原创 2024-03-21 14:30:20 · 640 阅读 · 0 评论 -
.NET Emit 入门教程:第一部分:Emit 介绍:Emit 的作用和优势(下)
Emit 作为.NET开发中的一项重要技术,具有诸多作用和优势。在本文中,我们将探讨Emit技术的作用以及其在实际开发中的优势。原创 2024-03-20 15:24:34 · 409 阅读 · 0 评论 -
.NET Emit 入门教程:第一部分:Emit 介绍:什么是 Emit
在.NET开发中,Emit 是一种动态生成IL代码的技术,通过使用 System.Reflection.Emit 命名空间中的类,可以在运行时创建和修改程序集、类型和方法。这种技术为开发人员提供了一种强大的方式来在运行时动态生成和执行代码:Emit 技术通常用于解决需要在运行时动态生成代码的特定场景,例如在ORM(对象关系映射)框架中动态创建实体类,或者在AOP(面向切面编程)中动态创建代理类。原创 2024-03-20 15:22:49 · 1351 阅读 · 0 评论