.Net基礎:學習反射中的動態創建對象

Assembly的CreateInstance有三個重載,第一個參數需要是一個字符串表示的完整的類名。第二個參數是一個bool類型,如果爲 true,表示對第一個參數不區分大小寫。


第三個: 影響執行搜索的方式的位屏蔽。此值是 System.Reflection.BindingFlags 中的位標誌的組合。

 

// binder: 一個啓用綁定、參數類型強制、成員調用以及通過反射進行 MemberInfo 對象檢索的對象。如果 binder 爲 null,則使用默認聯編程序。// args: Object 類型的數組,包含要傳遞給構造函數的參數。此參數數組在數量、順序和類型方面必須與要調用的構造函數的參數匹配。如果需要默認的構造函數,則 args 必須是空數組或 null。


// culture: 用於控制類型強制的 CultureInfo 的實例。如果這是 null,則使用當前線程的 CultureInfo。(例如,這對於將表示 1000 的 String 轉換爲


Double 值是必需的,因爲不同的區域性以不同的方式表示 1000。


// activationAttributes: 包含一個或多個可以參與激活的屬性的數組。通常爲包含單個 System.Runtime.Remoting.Activation.UrlAttribute 對象的數組。

 


System.Runtime.Remoting.Activation.UrlAttribute 指定激活遠程對象所需的 URL。有關客戶端激活的對象的詳細說明,請參見客戶端激活。


Activator類的靜態方法CreateInstance。


CreateInstance的第一個參數說明是程序集的名稱,爲null時表示當前程序集;第二個參數說明要創建的類型名稱。 Activator.CreateInstance返回的是一個ObjectHandle對象,必須進行一次Unwrap()才能返回Object類型, 進而可以強制轉換成我們需要的類型(本例中是MathClass)。ObjectHandle包含在System.Runtime.Remoting命名 空間中,可見它是Remoting相關的,實際上ObjectHandle類只是一個對原類型進行了一個包裝以便進行封送。


無參構造:


有參構造:


動態調用 :


.使用InvokeMember調用方法


InvokeMember("方法名", BindingFlags.InvokeMethod, null,對象實例,方法參數);


靜態:InvokeMember("方法名", BindingFlags.InvokeMethod, null,'類型Type',方法參數);


.MethodInfo.Invoke調用方法

 

MethodInfo mi = t.GetMethod("方法名"", BindingFlags.Instance | BindingFlags.Public);


mi.Invoke(對象實例, null);


靜態


MethodInfo mi1 = t.GetMethod("方法名"", BindingFlags.Static | BindingFlags.Public);


Mi1.Invoke(null, 方法參數 );


用反射可以達到最大程度上的多態

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章