2

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

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

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

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

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

4

1 回答 1

12

Opcodes.Ldsfld

因此,假设您像FieldBuilder num1 = ...以前一样在某个地方创建了 num1 ,您可以通过以下方式将其加载到堆栈中generator.Emit(Opcodes.ldsfld, num1);

于 2012-05-17T17:49:45.463 回答