首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

使用 Emit 生成 IL 代码

利用这项能力,我们能够在运行时生成一段代码/一个方法/一个类/一个程序集。 本文将介绍使用 Emit 生成 IL 代码的方法,以及在此过程中可能遇到的各种问题。...定义方法签名 在 IL 中,方法名称可以使用比 C# 更多的字符,例如“”,这也是 C# 编译闭包时喜欢使用的字符。...如果你试图生成实例方法,那么实例本身 this 将成为第一个参数,不过并不需要额外将它定义到参数列表中。 当然,如果是静态方法,我们能够自己指定一个 this 参数,不过没有实际的意义。...il.MarkLabel(endOfWholeIfElse); ---- 参考资料 生成方法签名与元数据 ParameterBuilder Class (System.Reflection.Emit...生成方法体 ILGenerator.DefineLabel Method (System.Reflection.Emit) ILGenerator.MarkLabel Method (Label

1K20

C# 使用Emit深克隆

有人问,复制一个类所有属性到另一个类有多少方法?这也就是问深克隆有多少个方法,容易想的有三个。直接复制,反射复制,序列化复制。...第一步是命名,因为需要把一个类的所有属性复制到另一个类,需要调用方法,而方法需要名字,所以第一步就是命名。...但是定义方法后需要写方法内的代码,这时需要使用 ILGenerator ,使用他的 Emit 方法,这个方法的速度很快,使用的时候需要知道 IL 的,如果不知道,没关系,我接下来会仔细说。...,对应压入参数,所以可以通过反射获得方法,然后调用这个方法,于是写成代码请看下面 generator.Emit(OpCodes.Ldarg_1);// los...generator.Emit(OpCodes.Callvirt, temp.SetMethod); 因为可以把这个拿出转化方法,于是所以的下面给所有代码

97010

C# 使用Emit深克隆

有人问,复制一个类所有属性到另一个类有多少方法?这也就是问深克隆有多少个方法,容易想的有三个。直接复制,反射复制,序列化复制。...第一步是命名,因为需要把一个类的所有属性复制到另一个类,需要调用方法,而方法需要名字,所以第一步就是命名。...但是定义方法后需要写方法内的代码,这时需要使用 ILGenerator ,使用他的 Emit 方法,这个方法的速度很快,使用的时候需要知道 IL 的,如果不知道,没关系,我接下来会仔细说。...,对应压入参数,所以可以通过反射获得方法,然后调用这个方法,于是写成代码请看下面 generator.Emit(OpCodes.Ldarg_1);// los...generator.Emit(OpCodes.Callvirt, temp.SetMethod); 因为可以把这个拿出转化方法,于是所以的下面给所有代码

50710
领券