淮北建站,网站专题设计模板,在线做网站怎么做,oa软件C#主要支持 5 种动态创建对象的方式#xff1a; 1. Type.InvokeMember 2. ContructorInfo.Invoke 3. Activator.CreateInstance(Type) 4. Activator.CreateInstance(assemblyName, typeName) 5. Assembly.CreateInstance(typeName) 最快的是方式 3 1. Type.InvokeMember 2. ContructorInfo.Invoke 3. Activator.CreateInstance(Type) 4. Activator.CreateInstance(assemblyName, typeName) 5. Assembly.CreateInstance(typeName) 最快的是方式 3 与 Direct Create 的差异在一个数量级之内约慢 7 倍的水平。其他方式至少在 40 倍以上最慢的是方式 4 要慢三个数量级。 尽量NEW 少反射 Assembly.CreateInstance()创建实例与New的区别 区别一 new是调用的newobj方法来直接实例化对象在托管堆上分配内存的编译时确定的并且编译时进行了类型检查。 CreateInstance方法是通过调用程序集的元数据根据元数据描述来创建对象的类型不安全的但是它可以动态创建对象。优势应该在于灵活吧。 区别二 Assembly.CreateInstance()是动态加载即运行时创建类编译时不验证类是否存在。 new是静态加载。编译时类已经被编译。 Assembly.Load(程序集名称).CreateInstance(命名空间.类) 见http://www.tuicool.com/articles/bIjUzu class Program{static void Main(string[] args){ILoveMM mm (ILoveMM)Assembly.Load(Reflection).CreateInstance(Reflection.LoveMM);//这块直接强制类型转换就行mm.Output(); }}interface ILoveMM{void Output();}class LoveMM : ILoveMM{public void Output(){Console.WriteLine(I love you MM);}} 关于反射中Assembly.CreateInstance()与Activator.CreateInstance()方法的区别 msdn查到了两个方法的介绍 Assembly.CreateInstance 方法 (String) 使用区分大小写的搜索从此程序集中查找指定的类型然后使用系统激活器创建它的实例。 Activator.CreateInstance 方法 (Type) 使用与指定参数匹配程度最高的构造函数来创建指定类型的实例。 //从程序集创建对象实例 string path System.Configuration.ConfigurationSettings.AppSettings[DAL];//数据层的程序集名称 return (IDbObject)Assembly.Load(path).CreateInstance(path.DbObject); 如果你的数据层不是单独的程序集,可以采用如下方法加载 //从程序集创建对象实例
string path System.Configuration.ConfigurationSettings.AppSettings[DAL];//数据层的程序集名称
return (IDbObject)Assembly.Load(path).CreateInstance(path.DbObject); 如果你的数据层不是单独的程序集,可以采用如下方法加载 //使用与指定参数匹配程度最高的构造函数来创建指定类型的实例
string path System.Configuration.ConfigurationSettings.AppSettings[DAL];
string TypeNamepath.DbObject
Type objType Type.GetType(TypeName,true);
return (IDbObject)Activator.CreateInstance(objType); 见http://blog.163.com/jiang_tao_2010/blog/static/1211268902009817324945/ 自己的代码 //Assembly assembly Assembly.Load(webSiteShopCode); //var objGrab (IGrab)assembly.CreateInstance(webSiteShopCode .Grab); Type objType Type.GetType(webSiteShopCode .Grab, true); var objGrab (IGrab)Activator.CreateInstance(objType); ; var product objGrab.GetProInfo(createdTime, webSiteShopCode, i, url); 转载于:https://www.cnblogs.com/ChineseMoonGod/p/5190983.html