日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态创建对象

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态创建对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C#主要支持 5 種動態創建對象的方式:   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 TypeName=path+".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

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的动态创建对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。