如何加载静态字段?

时间:2012-05-17 17:45:05

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

我通过Reflection.Emit生成一个带静态字段num1,num2等的Type。

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

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

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

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

1 个答案:

答案 0 :(得分:12)

Opcodes.Ldsfld

因此,假设您之前在FieldBuilder num1 = ...之类的地方创建了num1,可以通过generator.Emit(Opcodes.ldsfld, num1);

将其加载到堆栈中