首页 > 其他 > 详细

使用动态方法生成对象

时间:2020-03-16 01:20:42      阅读:161      评论:0      收藏:0      [点我收藏+]

 

  创建动态方法,在动态方法中创建对象.这样就可以避免使用Activator.CreateInstance 

        /// <summary>
        /// 生成动态方法
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="type"></param>
        /// <returns></returns>
        private static T GeneratorNewObjDelegate<T>(Type type) where T : class
        {
            var method = new DynamicMethod("Method_" + type.FullName, type, Type.EmptyTypes, true);
            var il = method.GetILGenerator();
            var typeConstructor = type.GetConstructor(Type.EmptyTypes);
            if (type != null)
            {
                il.Emit(OpCodes.Newobj, typeConstructor);
                il.Emit(OpCodes.Ret);
                object del = method.CreateDelegate(typeof(T));
                return (T)del;
            }
            return null;
        }

  使用方法为:

  

 var newObj = GeneratorNewObjDelegate<Func<TestDeletegateMethod>>(typeof(TestDeletegateMethod));
            if (newObj != null)
            {
                    newObj();
            }

 

使用动态方法生成对象

原文:https://www.cnblogs.com/student-note/p/12501296.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!