簡體   English   中英

我可以在不使用 FieldInfo 的情況下使用 OpCodes.Ldsfld 嗎?

[英]Can I use OpCodes.Ldsfld without using FieldInfo?

我想避免使用 GetType 和 GetField。 我可以只在 Ldsfld 中使用字符串嗎? 我在下面包含了我要完成的工作的模型。 正如您所看到的,我是 IL Generation 的新手 - 我正在嘗試消除一些成本,即我的應用程序中的反射成本。

using System;
using System.Reflection.Emit;

namespace ConsoleApplication10
{
    static class Program
    {
        public static string TextBox1 = "Hello World!";

        static void Main(string[] args)
        {
            var dm = new DynamicMethod("My_method",
                typeof(string), null, true);

            var il = dm.GetILGenerator();
            il.Emit(OpCodes.Ldsfld, "string ConsoleApplication10.Program::TextBox1");
            il.Emit(OpCodes.Ret);
            var func = (Func<string>)dm.CreateDelegate(typeof(Func<string>));
            var s = func();

            Console.WriteLine(s);
        }
    }
}

不,你不能, OpCodes.Ldsfld的文檔說:

以下Emit方法重載可以使用ldsfld操作碼:

  • ILGenerator.Emit(OpCode, FieldInfo)

如果您知道FieldInfo的名稱, FieldInfo獲取FieldInfo ,您需要使用反射。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM