根據類名字串建立類名並且調用類裡的方法

來源:互聯網
上載者:User

根據類名字串執行個體化類,並調用類的方法或函數

2011-03-15 13:32

//擷取類型資訊

//如果調用其他的DLL

//System.Reflection.Assembly asmb = System.Reflection.Assembly.LoadFrom("DLL名");

// Type t = asmb.GetType("類名");

//如果是不調用其他DLL

System.Reflection.Assembly BLL = System.Reflection.Assembly.Load("www.www.BLL");            

 System.Type t = BLL.GetType("www.www.BLL."+ViewState["BLL"].ToString());            

 try             {                

//建立類型執行個體               

  object dObj = Activator.CreateInstance(t);                

 //擷取方法的資訊                

 System.Reflection.MethodInfo method = t.GetMethod("Delete");                

 //調用方法的一些標誌位(根據你的方法的標誌設定)                

 System.Reflection.BindingFlags flag = System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static;                

//方法的參數                

 object[] parameters = new object[] { int.Parse(ViewState["ID"].ToString()) };                

//取得方法返回的值               

  object returnValue = method.Invoke(dObj, flag, Type.DefaultBinder, parameters, null);           

  }            

 catch (System.Exception ex)             { }

 

說明:

Assembly assembly = Assembly.LoadFile("程式集路徑,不能是相對路徑"); // 載入程式集(EXE 或 DLL)
object obj = assembly.CreateInstance("類的完全限定名(即包括命名空間)"); // 建立類的執行個體

 

若要反射當前項目中的類可以為:
Assembly assembly = Assembly.GetExecutingAssembly(); // 擷取當前程式集
object obj = assembly.CreateInstance("類的完全限定名(即包括命名空間)"); // 建立類的執行個體,返回為 object 類型,需要強制類型轉換
也可以為:
Type type = Type.GetType("類的完全限定名");
object obj = type.Assembly.CreateInstance(type);

補充:
1)反射建立某個類的執行個體時,必須保證使用類的完全限定名(命名空間 + 類名)。Type.GetType 方法返回 null 則意味搜尋中繼資料中的相關資訊失敗(反射失敗),請確保反射時使用類的完全限定名。
2)反射功能十分強大,沒有什麼不能實現的。

“跨程式集”(如下),請使用我給的第一種方法建立類的執行個體,並反射該執行個體的欄位、屬性、方法、事件... 然後動態調用之。

“反射”其實就是利用程式集的中繼資料資訊。

“跨程式集”反射可以有很多方法,編寫程式時請先匯入 System.Reflection 命名空間,假設你要反射一個 DLL 中的類,並且沒有引用它(即未知的類型):
Assembly assembly = Assembly.LoadFile("程式集路徑,不能是相對路徑"); // 載入程式集(EXE 或 DLL)
object obj = assembly.CreateInstance("類的完全限定名(即包括命名空間)"); // 建立類的執行個體

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.