動態建立對象

來源:互聯網
上載者:User

標籤:

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);

 

動態建立對象

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.