zoukankan      html  css  js  c++  java
  • 一个非常简单的反射加速方案

    不废话,直接上代码:

        class Program
        {
            private static readonly MethodInfo HelpMethod = typeof(Program).GetMethod("GetHelp", BindingFlags.NonPublic | BindingFlags.Static);
    
            static void Main(string[] args)
            {
                // you can cache the delegate, the type of delegate is always Func<object, object>
                var d = TestGet(typeof(Program).GetProperty("X"));
                var p = new Program { X = 1 };
                Console.WriteLine(d(p));
                Console.ReadLine();
            }
    
            private static Func<object, object> TestGet(PropertyInfo p)
            {
                var f = typeof(Func<,>).MakeGenericType(p.DeclaringType, p.PropertyType);
                var d = Delegate.CreateDelegate(f, p.GetGetMethod());
                return (Func<object, object>)Delegate.CreateDelegate(typeof(Func<object, object>), d, HelpMethod.MakeGenericMethod(p.DeclaringType, p.PropertyType));
            }
    
            private static object GetHelp<T, TResult>(Delegate d, object obj)
            {
                return ((Func<T, TResult>)d)((T)obj);
            }
    
            public int X { get; set; }
        }
    View Code
  • 相关阅读:
    Beta 冲刺(4/7)
    Beta 冲刺(3/7)
    Beta 冲刺(2/7)
    福大软工 · 最终作业
    福大软工 · 第十二次作业
    Beta 冲刺(7/7)
    Beta 冲刺(6/7)
    Beta 冲刺(5/7)
    Beta 冲刺(4/7)
    Beta 冲刺(3/7)
  • 原文地址:https://www.cnblogs.com/vwxyzh/p/3564862.html
Copyright © 2011-2022 走看看