




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、反射學(xué)習(xí)整理 一、MSDN上面找的學(xué)習(xí)資料反射提供了封裝程序集、模塊和類型的對象(Type 類型)??梢允褂梅瓷鋭討B(tài)創(chuàng)建類型的實例,將類型綁定到現(xiàn)有對象,或從現(xiàn)有對象獲取類型并調(diào)用其方法或訪問其字段和屬性。如果代碼中使用了屬性,可以利用反射對它們進(jìn)行訪問。反射通常具有以下用途:· 使用 Assembly 定義和加載程序集,加載在程序集清單中列出的模塊,以及從此程序集中查找類型并創(chuàng)建該類型的實例。· 使用 Module 了解如下的類似信息:包含模塊的程序集以及模塊中的類等。您還可以獲取在模塊上定義的所有全局方法或其
2、他特定的非全局方法。· 使用 ConstructorInfo 了解以下信息:構(gòu)造函數(shù)的名稱、參數(shù)、訪問修飾符(如 public 或 private)和實現(xiàn)詳細(xì)信息(如 abstract 或 virtual)等。使用 Type 的 GetConstructors 或 GetConstructor 方法來調(diào)用特定的構(gòu)造函數(shù)。· 使用 MethodInfo 了解以下信息:方法的名稱、返回類型、參數(shù)、訪問修飾符(如 public 或 private)和實現(xiàn)詳細(xì)信息(如 abstract 或 virtual)等。使用 Type 的 Ge
3、tMethods 或 GetMethod 方法來調(diào)用特定的方法。· 使用 FieldInfo 了解以下信息:字段的名稱、訪問修飾符(如 public 或 private)和實現(xiàn)詳細(xì)信息(如 static)等;并獲取或設(shè)置字段值。· 使用 EventInfo 來了解如下的類似信息:事件的名稱、事件處理程序數(shù)據(jù)類型、自定義屬性、聲明類型和反射類型等;并添加或移除事件處理程序。· 使用 PropertyInfo 來了解如下的類似信息:屬性的名稱、數(shù)據(jù)類型、聲明類型、反射類型和只讀或可寫狀態(tài)等;并獲取
4、或設(shè)置屬性值。· 使用 ParameterInfo 來了解如下的類似信息:參數(shù)的名稱、數(shù)據(jù)類型、參數(shù)是輸入?yún)?shù)還是輸出參數(shù),以及參數(shù)在方法簽名中的位置等。· 當(dāng)您在一個應(yīng)用程序域的僅反射上下文中工作時,請使用 CustomAttributeData 來了解有關(guān)自定義屬性的信息。使用 CustomAttributeData,您不必創(chuàng)建屬性的實例就可以檢查它們。二、反射的重要應(yīng)用與相關(guān)練習(xí)反射在下列情況下很有用:· 需要訪問程序元數(shù)據(jù)的屬性。C# 具有一個反射系統(tǒng),可用來檢索用自定義屬性定義的信息
5、。主要方法是 GetCustomAttributes,它返回對象數(shù)組,這些對象在運行時等效于源代碼屬性。下面是我參照MSDN寫的一個例子:定義一個自定義屬性,將其應(yīng)用于若干實體并通過反射進(jìn)行檢索。 1using System; 2using System.Collections.Generic; 3using System.Text; 4 5namespace Attribut 6 7 /允許指定多個屬性實例,類YaoJian中進(jìn)行了練習(xí)&
6、#160;8 AttributeUsage(AttributeTargets.Class,AllowMultiple = true) 9 public class Students:Attribute10 11 string name;12
7、0; public int age;13 14 public Students(string Name)15 16
8、;name = Name;17 age = 18;18 1920 public string GetName()21
9、;22 return name;23 24 25 /將自定義屬性應(yīng)用于類26 Students("李江")27 class LiJiang2
10、8 29 /30 3132 /不定義Students屬性33 class ZhaoYong34 35 /36 37
11、 /應(yīng)用多個屬性實例38 Students("姚鍵"),Students("李云",age = 20)39 class YaoJian40 41 /42 43 class&
12、#160;Program44 45 static void Main(string args)46 47 StudentsInfo(typeof(LiJiang);48 &
13、#160; StudentsInfo(typeof(ZhaoYong);49 StudentsInfo(typeof(YaoJian);50 5152 privat
14、e static void StudentsInfo(Type t)53 54 Console.WriteLine("學(xué)生信息是:0",t);55 /獲取對象中的
15、自定義屬性56 Attribute att = Attribute.GetCustomAttributes(t);57 foreach (Attribute a in att)58
16、60; 59 if (a is Students)60 61
17、 Students S = (Students)a;62 Console.WriteLine("學(xué)生的姓名是:0,年齡是:1",S.G
18、etName(),S.age.ToString();63 64 65 66 6768運行結(jié)果是: ·
19、60; 檢查和實例化程序集中的類型。· 在運行時構(gòu)建新類型。使用 中的類。· 執(zhí)行后期綁定,訪問在運行時創(chuàng)建的類型的方法。三、實踐,用反射調(diào)用COM用反射調(diào)用COM非常的方便,不需要先對COM進(jìn)行注冊添加引用,用Assembly類中的LoadFrom方法直接可以講.dll文件加載到程序中,然后對其實例化使用。實例:1、先做一個簡單的調(diào)用系統(tǒng)outlook的COM。先在VS2005中建一個windows控件庫工程,取名為Send,然后把控件的界面刪掉,在Send工程中添加一個windows窗體也取名為Send,在窗體
20、的load事件里面寫代碼調(diào)用outlook。完整的代碼如下: 1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Text; 7using System.Windows.Forms; 8 9/使用進(jìn)程引用命名空間10u
21、sing System.Diagnostics;11namespace Send1213 public partial class Send : Form14 15 public Send()16 17 &
22、#160; InitializeComponent();18 19 /*/ <summary>20 / 在Form_Load中調(diào)用Windows帶的outlook21 &
23、#160; / </summary>22 / <param name="sender"></param>23 / <param name="e"></param>24 &
24、#160; private void Send_Load(object sender, EventArgs e)25 26 Process P = new Process();27
25、 = "C:Program FilesOutlook Expressmsimn.exe"28 P.Start();29 this.Close();30
26、; 31 3233代碼寫完以后,生成一下,這時在工程的bin文件夾下面就生成了一個Send.dll的文件。2、用反射來調(diào)用上面的COM在Send工程的解決方案上面點擊右鍵添加/新建項目/windows應(yīng)用程序,取名Fanshe在Form1上面添加一個button,并設(shè)置其相關(guān)屬性,界面如圖:把上面生成的Send.dll放到Fanshe的bin目錄下面,在button的click事件中添加代碼調(diào)用COM,完整代碼如下: 1using System;&
27、#160;2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Text; 7using System.Windows.Forms; 8 9/使用反射引用的命名空間10using System.Reflection;1112namespace Fanshe13
28、14 public partial class frm : Form15 16 public frm()17 18 I
29、nitializeComponent();19 2021 private void btn_Click(object sender, EventArgs e)22 23
30、160; /*/*加載COM,這樣寫COM的默認(rèn)路徑在bin文件夾下,如果不在可以通過絕對路徑或者相對路徑指到COM所在的位置24 *比如:Assembly.LoadFrom("D:/App/Send.dll")或Assembly.LoadFrom("./Send.dll")25 */26
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年乳制品市場分析:關(guān)稅變化下的產(chǎn)業(yè)格局與消費趨勢
- 混凝土擠壓墻施工方案
- 《論語●孟子》閱讀練習(xí)
- 黑龍江省大慶市讓胡路區(qū)大慶中學(xué)2024-2025學(xué)年高二上學(xué)期期末數(shù)學(xué)試題(解析版)
- 安徽省馬鞍山市當(dāng)涂第一中學(xué)2024-2025學(xué)年高一上學(xué)期期末質(zhì)量檢測數(shù)學(xué)試題 (解析版)
- 辦公室管理-形考任務(wù)五(第六章~第七章)-國開-參考資料
- 2025年真實情景測試題及答案
- 混凝土攔水帶施工方案
- 6年級上冊英語書課文第2單元
- 5-羥基-1-甲基吡唑的合成
- 人教版五年級數(shù)學(xué)下冊全冊教案含教學(xué)反思
- 2025年園林綠化工(高級)考試題庫及答案
- 2024春四年級上下冊音樂測試專項測試題及答案
- 多發(fā)傷骨折護(hù)理查房
- 2023年軟件評測師《基礎(chǔ)知識》考試題庫(濃縮500題)
- 中建預(yù)制構(gòu)件吊裝安全專項施工方案
- 《馬化騰創(chuàng)業(yè)經(jīng)歷》課件
- 2023年湖北省生態(tài)環(huán)保有限公司招聘筆試真題
- 2023年新疆事業(yè)單位開展招聘考試真題
- 學(xué)校班主任談心制度實施方案
- CRISPR-Cas9-基因編輯技術(shù)簡介
評論
0/150
提交評論