在.NET Framework 4.0引入了几个项目的反射API,范围从极其有用的重要对我的工作。 在这些保护构造函数Assembly
, Module
, MethodBody
和LocalVariableInfo
和新的CustomAttributeData
类。 有几个项目我仍然需要相当麻烦的解决。 我相信他们很容易地适用于同一[小]一群人将需要延长我刚刚上市的类型。
这一次,我正在寻找一种方式来构造的一个实例System.Reflection.Emit.OpCode
结构用我自己的参数。 目前,我调用内部构造函数来创建实例。 因为我揭露构建项目,因为它不是有损于性能的public static readonly
重用一个类的成员,但你能想象这是一个极其次优方案。
没有任何理由,不可能使目前的内部OpCode
与文档构造公众,指出用户构建OpCode
s不能与所使用ILGenerator
。
编辑:下面是一个例子。 通过创建下面的自定义操作码,我能使用它的一些指令中间列表之间的字节代码转换,而不是诉诸创建临时局部变量。 如果我是发射IL,我剩下的转换swap
指令有效的IL表示,但对我来说,下一步是了解自定义一个JIT swap
指令。 我使用的是Prefix2
前缀0xFD
,这是任何有效的IL操作码保留,未使用。
/// <summary>
/// Swaps adjacent elements on the evaluation stack. The supplied inline int32 argument gives the
/// index of the topmost item in the pair.
/// </summary>
public static readonly OpCode Swap;
我也可以使用此为不具有简单/常见的托管代码表示,但在不同的本地代码生成器提供一个简单的依赖于平台的表示JIT内部函数。 其中之一是ldthread
(负载当前托管线程的参考RuntimeThread
表示)。