代码之家  ›  专栏  ›  技术社区  ›  Sam Harwell

我们能构造一个“操作码”的实例吗?

  •  3
  • Sam Harwell  · 技术社区  · 15 年前

    Assembly , Module , MethodBody ,和 LocalVariableInfo 以及新的 CustomAttributeData 班级。有几个项目我仍然需要,这是相当麻烦的工作。我相信它们很容易适用于同一(小)群体,需要扩展我刚才列出的类型。

    这次 :我正在寻找一种方法来构造 System.Reflection.Emit.OpCode 用我自己的参数构造。我当前调用内部构造函数来创建实例。这不会对性能造成不利影响,因为我将构造的项公开为 public static readonly 类的成员进行重用,但正如您所想象的,这是一个极不理想的场景。

    有没有任何理由不能使当前的内部 OpCode 具有说明用户构造的文档的公共构造函数 操作码 s不能与一起使用 ILGenerator

    编辑:下面是一个例子。通过创建以下自定义操作码,我可以在一些中间指令列表之间的字节码转换中使用它,而无需创建临时局部变量。如果我发射IL,我会转换剩下的 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;
    

    ldthread (加载对当前托管线程的 RuntimeThread 代表)。

    2 回复  |  直到 15 年前
        1
  •  0
  •   Laurent Etiemble    15 年前

    我认为不可能创建自定义操作码实例,因为操作码实例严格地派生自 Common Language Infrastructure (CLI) documentation . 因此,即使您的案例有意义,操作码似乎也不是一种可行的方法。

        2
  •  0
  •   codymanix    14 年前

    推荐文章