亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C#反射

2019-11-17 01:26:24
字體:
來源:轉載
供稿:網友

C#反射

一.什么是反射?

反射 Reflection 是提供封裝程序集、模塊和類型的對象

程序集包含模塊,而模塊包含類型,類型又包含成員。反射則提供了封裝程序集、模塊和類型的對象。您可以使用反射動態地創建類型的實例,將類型綁定到現有對象,或從現有對象中獲取類型。然后,可以調用類型的方法或訪問其字段和屬性。

二.反射的用途

1.使用 Assembly 定義和加載程序集,加載在程序集清單中列出的模塊,以及從此程序集中查找類型并創建該類型的實例。

2.使用 Module 了解如下的類似信息:包含模塊的程序集以及模塊中的類等。您還可以獲取在模塊上定義的所有全局方法或其他特定的非全局方法。

3.使用 ConstructorInfo 了解如下的類似信息:構造函數的名稱、參數、訪問修飾符(如 public 或 PRivate)和實現詳細信息(如 abstract 或 virtual)等。4.使用 Type 的 GetConstructors 或 GetConstructor 方法來調用特定的構造函數。

5.使用 MethodInfo 來了解如下的類似信息:方法的名稱、返回類型、參數、訪問修飾符(如 public 或 private)和實現詳細信 息(如 abstract 或 virtual)等。使用 Type 的 GetMethods 或 GetMethod 方法來調用特定的方法。6.使用 FieldInfo 來了解如下的類似信息:字段的名稱、訪問修飾符(如 public 或 private)和實現詳細信息(如 static)等;并獲取或設置字段值。7.使用 EventInfo 來了解如下的類似信息:事件的名稱、事件處理程序數據類型、自定義屬性、聲明類型和反射類型等;并添加或移除事件處理程序。8.使用 PropertyInfo 來了解如下的類似信息:屬性的名稱、數據類型、聲明類型、反射類型和只讀或可寫狀態等;并獲取或設置屬性值。9.使用 ParameterInfo 來了解如下的類似信息:參數的名稱、數據類型、參數是輸入參數還是輸出參數,以及參數在方法簽名中的位置等。三.實例首先,我們創建一個普通的類庫項目Alex.Reflector。如圖具體代碼如下:
 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 namespace Alex.Reflector 6 { 7     public class ReflectorTest 8     { 9         10         public string Name { get; set; }11         /// <summary>12         /// 靜態方法13         /// </summary>14         /// <param name="name"></param>15         /// <returns></returns>16         public static string StaticMethod(string name)17         {18             return name;19         }20         /// <summary>21         /// 實例方法22         /// </summary>23         /// <param name="name"></param>24         /// <returns></returns>25         public string GetNameExample(string name)26         {27             return "Hi" + name;28         }29         /// <summary>30         /// 無參的方法31         /// </summary>32         /// <returns></returns>33         public string GetNoParameter()34         {35             return "沒有參數";36         }37     }38 }

我們生成該類庫項目會在Bin目錄下生成一個Alex.Reflector.dll(根據你項目的名字,這里只是舉例)的文件。

接下來。我們就要用我們的 "反射"技術來操作我們這個DLL文件。

在當前解決方案下新建一個項目名為Alex.ReflectorDemo,如圖然后在此項目下新建一個頁面,我們暫時命名為ReflectorTest.aspx整體結構如圖

ReflectorTest.aspx源碼如下

 1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReflectorTest.aspx.cs" Inherits="Alex.ReflectorDemo.ReflectorTest" %> 2  3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 4  5 <html xmlns="http://www.w3.org/1999/xhtml"> 6 <head runat="server"> 7     <title>C#反射實例</title> 8 </head> 9 <body>10     <form id="form1" runat="server">11     <p>12     <asp:Button ID="btn1" runat="server" Text="利用反射去調用程序集中(包含的類)所包含的方法,屬性,成員" onclick="btn1_Click" />13     </p>14     <asp:Label ID="lblShowMessage" runat="server" Text=""></asp:Label>15     <p>16         &nbsp;</p>17     <p>18         <asp:Button ID="btn2" runat="server" Text="利用反射獲取程序集中類,類的成員(方法,屬性等)" 19             onclick="btn2_Click" />20     </p>21     <asp:Label ID="lblShowMessage1" runat="server" Text=""></asp:Label>22     </form>23 </body>24 </html>

ReflectorTest.aspx.cs源碼如下。在這里我就不一一解釋了。大家一看就懂。

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 using System.Reflection; 8  9 namespace Alex.ReflectorDemo10 {11     public partial class ReflectorTest : System.Web.UI.Page12     {13         Assembly assembly;14         Type type;15         MethodInfo methodinfo;16         protected void Page_Load(object sender, EventArgs e)17         {18 19         }20         /// <summary>21         /// 利用反射去調用程序集中(包含的類)所包含的方法,屬性,成員22         /// </summary>23         /// <param name="sender"></param>24         /// <param name="e"></param>25         protected void btn1_Click(object sender, EventArgs e)26         {27             try28             {29                 assembly = Assembly.LoadFile(@"D:/My/Reflector/Alex.Reflector/Alex.Reflector/bin/Debug/Alex.Reflector.dll");//根據DLL的物理路徑加載30                 type = assembly.GetType("Alex.Reflector.ReflectorTest");//根據類型名稱反射出該類型,注意看格式是命名空間.類名31                 object strobject = Activator.CreateInstance(type);//創建該類型的對象實例32                 methodinfo = type.GetMethod("GetNameExample");//反射獲取方法。實例方法33                 string s = (string)methodinfo.Invoke(strobject, new string[] { "田小賤" });34                 lblShowMessage.Text = "調用實例方法返回:" + s.ToString()+"</br>";35 36                 methodinfo = type.GetMethod("StaticMethod");37                 string s1 = (string)methodinfo.Invoke(null, new string[] { "肖小仙" });38                 lblShowMessage.Text += "調用靜態方法返回:" + s1.ToString();39                 type.GetProperty("Name").SetValue(strobject, "田小賤", null);40             }41             catch (Exception)42             {43                 throw;44             }45             finally46             {47                 assembly = null;48                 type = null;49                 methodinfo = null;50                 51             }52         }53         /// <summary>54         /// 利用反射獲取程序集中類,類的成員(方法,屬性等)55         /// </summary>56         /// <param name="sender"></param>57         /// <param name="e"></param>58         protected void btn2_Click(object sender, EventArgs e)59         {60             assembly = Assembly.LoadFile(@"D:/My/Reflector/Alex.Reflector/Alex.Reflector/bin/Debug/Alex.Reflector.dll");//根據DLL的物理路徑加載61             Module[] module = assembly.GetModules();//獲取作為程序集的一部分的所有模塊62             Type[] types = assembly.GetTypes(); //獲取程序集中定義的所有類型63 64             foreach (var item in types)65             {66                 lblShowMessage1.Text ="所包含的類型名稱:"+ item.Name+"</br>";67                 MethodInfo[] methodinfos=item.GetMethods();//  (MethodInfo)發現方法的屬性,并提供對方法元數據的訪問)獲取該類型下所包含的方法信息68                 foreach (var method in methodinfos)69                 {70                     lblShowMessage1.Text += "該類所包含的方法名稱:"+method.Name+"</br>";71                 }72                 PropertyInfo[] propertyInfo = item.GetProperties();//(ProperInfo)發現屬性的特性,并提供對該屬性元數據的訪問73 74                 foreach (var property in propertyInfo)75                 {76                     lblShowMessage1.Text += "該類所包含的屬性名稱:" + property.Name; ;77                 }78             }79 80         } 81     }82 }
View Code

多話不說,直接看運行效果。

最后。提醒大家一下。反射相對來說會影響性能。 希望大家根據自己實際情況去合理使用。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品激情在线| 亚洲一区制服诱惑| 国产成人免费91av在线| 日韩一区二区三区xxxx| 亚洲精品影视在线观看| 黑人巨大精品欧美一区免费视频| 亚洲天堂精品在线| 亚洲欧美国产精品| 性色av一区二区三区免费| 日韩av在线免费观看| 国产精品99久久久久久白浆小说| 国产精品扒开腿爽爽爽视频| 国产啪精品视频网站| 欧美日韩综合视频| 国产精品中文字幕在线| 久久久久久久成人| 亚洲精品国产免费| 国产成人一区三区| 久久亚洲精品一区二区| 亚洲视频欧美视频| 亚洲日本成人女熟在线观看| 色悠悠国产精品| 欧美精品在线播放| 日韩在线欧美在线国产在线| 色诱女教师一区二区三区| 2019最新中文字幕| 日韩中文字幕在线视频| 日韩欧美在线一区| 亚洲一区亚洲二区亚洲三区| 91视频九色网站| 国内精品模特av私拍在线观看| 日韩欧美亚洲国产一区| 亚洲精品中文字幕女同| 亚洲精品成人免费| 久久精品99国产精品酒店日本| 91九色视频在线| 欧美精品免费在线| 中文字幕欧美国内| 亚洲精品小视频在线观看| 国产日韩综合一区二区性色av| 欧美性猛交xxxx乱大交蜜桃| 日韩精品在线观看一区| 国产精品高潮粉嫩av| 国产精品av免费在线观看| 国产成人高潮免费观看精品| 亚洲精品电影在线| 亚洲人成网在线播放| 国产精品久久久久国产a级| 日韩在线观看成人| 久久国产精品影片| 青青草原成人在线视频| 久久久久中文字幕| 羞羞色国产精品| 日本中文字幕久久看| 中文字幕免费精品一区| 91精品国产91久久久久久吃药| 亚洲欧美另类在线观看| 亚洲图中文字幕| 亚洲国产精品久久| 亚洲精选一区二区| www.欧美精品一二三区| 欧美性xxxx18| 精品在线观看国产| 欧美巨大黑人极品精男| 中文字幕日韩欧美| 综合136福利视频在线| 91九色单男在线观看| 亚洲精品影视在线观看| 国产69精品久久久久99| 国产精品露脸av在线| 国产69精品久久久| 欧美亚洲在线播放| 精品成人在线视频| 亚洲精品在线视频| 久久久久久久av| 精品久久久999| 自拍偷拍亚洲精品| 国产成人激情小视频| 久久电影一区二区| 亚洲欧美日韩在线高清直播| 亚洲成人精品av| 国产一区深夜福利| 欧美wwwxxxx| 欧美激情一区二区三区成人| 国产精品入口日韩视频大尺度| 欧美日韩国产限制| 91精品国产91久久久久久最新| 日韩电影在线观看永久视频免费网站| 国产精品成人v| 91精品啪aⅴ在线观看国产| 精品久久久久久久中文字幕| 欧美精品激情在线| 国产日韩换脸av一区在线观看| 国产精品久久视频| 91久久精品在线| 97香蕉久久夜色精品国产| 一区二区亚洲精品国产| 日韩在线精品视频| 亚洲激情视频在线播放| 欧美在线观看日本一区| 欧美另类极品videosbestfree| 日韩中文字幕免费视频| www.欧美精品一二三区| 国产一区二区三区高清在线观看| 色777狠狠综合秋免鲁丝| 成人国产精品一区| 伦伦影院午夜日韩欧美限制| 久久久久久com| 精品国产一区av| 国产成人精品av| 精品久久久久久久大神国产| 91网站免费看| 久久久最新网址| 中文字幕亚洲无线码a| 欧美黄色片免费观看| 成人在线观看视频网站| 夜色77av精品影院| 久久色免费在线视频| 国产欧美精品xxxx另类| 国产91亚洲精品| 亚洲欧洲xxxx| 欧美日韩国产999| 欧美一级大片在线免费观看| 亚洲天堂av网| 青青草原一区二区| 日韩中文字幕在线视频播放| 国模视频一区二区三区| 国产精品观看在线亚洲人成网| 美女撒尿一区二区三区| 色狠狠av一区二区三区香蕉蜜桃| 欧美不卡视频一区发布| 欧美激情久久久| 国产亚洲精品成人av久久ww| 精品毛片网大全| 欧美日韩国产页| 亚洲午夜小视频| 欧美高清不卡在线| 国产精品国模在线| 伊人久久男人天堂| 综合国产在线视频| 亚洲人成网站色ww在线| 精品中文字幕在线观看| 中文亚洲视频在线| 日韩欧美在线国产| 欧美又大粗又爽又黄大片视频| 欧美老妇交乱视频| 欧美日韩另类字幕中文| 欧美日韩国产麻豆| 久久天天躁狠狠躁夜夜躁| 亚洲一区二区三区乱码aⅴ| 主播福利视频一区| 欧美一区二区三区四区在线| 亚洲美女动态图120秒| 亚洲一区中文字幕| 亚洲成人免费网站| 久久久精品日本| 91国内免费在线视频| 欧美激情视频网| 欧美性jizz18性欧美| 国产成人精品久久亚洲高清不卡| 国产精品久久久久久久久久东京| 国产噜噜噜噜噜久久久久久久久| 欧美一级大胆视频| 日本欧美爱爱爱|