代替Activator.CreateInstance

来源:互联网 发布:windows使用linux命令 编辑:程序博客网 时间:2024/05/17 09:47

我发现通过反射快速创建一个有默认构造函数的对象是一种很快的方式。

public class DynamicInitializer    {        public static V NewInstance<V>() where V : class        {            return ObjectGenerator(typeof(V)) as V;        }         private static object ObjectGenerator(Type type)        {            var target = type.GetConstructor(Type.EmptyTypes);            var dynamic = new DynamicMethod(string.Empty,                          type,                          new Type[0],                          target.DeclaringType);            var il = dynamic.GetILGenerator();            il.DeclareLocal(target.DeclaringType);            il.Emit(OpCodes.Newobj, target);            il.Emit(OpCodes.Stloc_0);            il.Emit(OpCodes.Ldloc_0);            il.Emit(OpCodes.Ret);             var method = (Func<object>)dynamic.CreateDelegate(typeof(Func<object>));            return method();        }         public static object NewInstance(Type type)        {            return ObjectGenerator(type);        }    }


0 0
原创粉丝点击