解讀.Net基礎(chǔ):學(xué)習(xí)反射中的動(dòng)態(tài)創(chuàng)建對(duì)象_.Net教程
推薦:談如何使用 Lambda 表達(dá)式做抽象代表Lambda表達(dá)比代表定義和帶外方法定義的結(jié)合更清楚,且相關(guān)的額外工作只需要滿足語(yǔ)言定義即可。不過,它也有一些不足之處。如果某個(gè)方法的參數(shù)包含System.Delegate 這樣的抽象類型,用lambda表達(dá)式介紹特殊的問題:C#編譯器不能將lambda表達(dá)式轉(zhuǎn)換成還未明確
Assembly的CreateInstance有三個(gè)重載。
第一個(gè)參數(shù)需要是一個(gè)字符串表示的完整的類名。
第二個(gè)參數(shù)是一個(gè)bool類型,如果為true,表示對(duì)第一個(gè)參數(shù)不區(qū)分大小寫。
第三個(gè)影響執(zhí)行搜索的方式的位屏蔽。此值是 System.Reflection.BindingFlags 中的位標(biāo)志的組合。
// binder: 一個(gè)啟用綁定、參數(shù)類型強(qiáng)制、成員調(diào)用以及通過反射進(jìn)行 MemberInfo 對(duì)象檢索的對(duì)象。如果 binder 為 null,則使用默認(rèn)聯(lián)編程序。// args: Object 類型的數(shù)組,包含要傳遞給構(gòu)造函數(shù)的參數(shù)。此參數(shù)數(shù)組在數(shù)量、順序和類型方面必須與要調(diào)用的構(gòu)造函數(shù)的參數(shù)匹配。如果需要默認(rèn)的構(gòu)造函數(shù),則 args 必須是空數(shù)組或 null。
// culture: 用于控制類型強(qiáng)制的 CultureInfo 的實(shí)例。如果這是 null,則使用當(dāng)前線程的 CultureInfo。(例如,這對(duì)于將表示 1000 的 String 轉(zhuǎn)換為
Double 值是必需的,因?yàn)椴煌膮^(qū)域性以不同的方式表示 1000。
// activationAttributes: 包含一個(gè)或多個(gè)可以參與激活的屬性的數(shù)組。通常為包含單個(gè) System.Runtime.Remoting.Activation.UrlAttribute 對(duì)象的數(shù)組。
System.Runtime.Remoting.Activation.UrlAttribute 指定激活遠(yuǎn)程對(duì)象所需的 URL。有關(guān)客戶端激活的對(duì)象的詳細(xì)說明,請(qǐng)參見客戶端激活。
Activator類的靜態(tài)方法CreateInstance。
CreateInstance的第一個(gè)參數(shù)說明是程序集的名稱,為null時(shí)表示當(dāng)前程序集;第二個(gè)參數(shù)說明要?jiǎng)?chuàng)建的類型名稱。Activator.CreateInstance返回的是一個(gè)ObjectHandle對(duì)象,必須進(jìn)行一次Unwrap()才能返回Object類型,進(jìn)而可以強(qiáng)制轉(zhuǎn)換成我們需要的類型(本例中是MathClass)。ObjectHandle包含在System.Runtime.Remoting命名空間中,可見它是Remoting相關(guān)的,實(shí)際上ObjectHandle類只是一個(gè)對(duì)原類型進(jìn)行了一個(gè)包裝以便進(jìn)行封送。
無參構(gòu)造:
有參構(gòu)造:
動(dòng)態(tài)調(diào)用 :
.使用InvokeMember調(diào)用方法
InvokeMember("方法名", BindingFlags.InvokeMethod, null,對(duì)象實(shí)例,方法參數(shù));
靜態(tài):InvokeMember("方法名", BindingFlags.InvokeMethod, null,.類型Type.,方法參數(shù));
.MethodInfo.Invoke調(diào)用方法
MethodInfo mi = t.GetMethod("方法名"", BindingFlags.Instance | BindingFlags.Public);
mi.Invoke(對(duì)象實(shí)例, null);
靜態(tài)
MethodInfo mi1 = t.GetMethod("方法名"", BindingFlags.Static | BindingFlags.Public);
Mi1.Invoke(null, 方法參數(shù) );
用反射可以達(dá)到最大程度上的多態(tài)
分享:淺析C# 2010命名和可選參數(shù)的新特性1.命名參數(shù)允許調(diào)用者通過提供參數(shù)的名稱來為其賦值,這樣參數(shù)的位置就不在重要了。可選參數(shù)允許在定義時(shí)為某些參數(shù)賦值,在調(diào)用時(shí)可以忽略這些
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過程實(shí)現(xiàn)分頁(yè)示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- 如何實(shí)現(xiàn)ASP.NET網(wǎng)站個(gè)性化
- 如何在GridView數(shù)據(jù)源為空時(shí)也顯示表頭
- ASP.NET 2.0 中XML數(shù)據(jù)的處理
- 在ASP.NET中自動(dòng)給URL加上超級(jí)鏈接
- 如何使用.Net C#開發(fā)批量ACCESS數(shù)據(jù)庫(kù)壓縮軟件
- ASP.NET筆記之CKEditor的使用方法
- 解讀 .NET開發(fā)者常犯的錯(cuò)誤
- 解讀VB.NET中有用的通用對(duì)象列表
- ASP.NET、JSP及PHP之間的抉擇
- .NET平臺(tái)依賴注入機(jī)制及IoC的設(shè)計(jì)與實(shí)現(xiàn)
- 相關(guān)鏈接:
復(fù)制本頁(yè)鏈接| 搜索解讀.Net基礎(chǔ):學(xué)習(xí)反射中的動(dòng)態(tài)創(chuàng)建對(duì)象
- 教程說明:
.Net教程-解讀.Net基礎(chǔ):學(xué)習(xí)反射中的動(dòng)態(tài)創(chuàng)建對(duì)象
。