2012-05-17 2 views
2

Я генерирую тип со статическими полями num1, num2 и т. Д. Через Reflection.Emit.Как загрузить статическое поле?

Теперь я не знаю, как испускать код, который загружает содержимое статического поля в сгенерированном типе в стек оценки статического метода. То, что я пытался до сих пор является:

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

Но ясно, что это не может работать, потому что он пытается загрузить поле экземпляра на «это», которое не входит в комплекте к статическому методу.

Какой код операции следует использовать для доступа к статическому полю?

ответ

12

Opcodes.Ldsfld

Таким образом, предполагается, что вы создали num1 где-нибудь FieldBuilder num1 = ... раньше, вы можете загрузить его в стек с помощью generator.Emit(Opcodes.ldsfld, num1);

+1

И если у меня нет экземпляра FieldInfo, но у меня есть имя, я могу сделай это? (Я создал поле, но в другом методе). – user35443

+0

Ну, это было бы сложно. Вы должны хотя бы пройти по TypeBuilder, чтобы вы могли захватить FieldInfo оттуда. –

+0

Хорошо. Спасибо . – user35443