【问题标题】:How to load static field?如何加载静态字段?
【发布时间】:2012-05-17 17:45:04
【问题描述】:

我正在通过 Reflection.Emit 生成具有静态字段 num1、num2 等的类型。

现在我不知道如何发出将生成类型中的静态字段的内容加载到静态方法的评估堆栈的代码。 到目前为止我尝试过的是:

generator.Emit(Opcodes.Ldarg, 0);
generator.Emit(Opcodes.Ldfld, "num1");

但显然这行不通,因为它试图在“this”上加载一个实例字段,而该字段并未提供给静态方法。

我应该使用哪个操作码来访问静态字段?

【问题讨论】:

    标签: c# .net reflection.emit il ilasm


    【解决方案1】:

    Opcodes.Ldsfld

    因此,假设您之前在 FieldBuilder num1 = ... 之类的某个位置创建了 num1,您可以通过 generator.Emit(Opcodes.ldsfld, num1); 将其加载到堆栈中

    【讨论】:

    • 如果我没有 FieldInfo 实例但我有名字,我可以这样做吗? (我已经创建了 Field 但使用另一种方法)。
    • 嗯,这会很棘手。您至少应该传递 TypeBuilder,这样您就可以从那里获取 FieldInfo。
    猜你喜欢
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2016-02-26
    • 2019-08-29
    • 2012-07-02
    • 2012-02-28
    • 1970-01-01
    • 2016-11-05
    相关资源
    最近更新 更多