Reflection(反射)
一.反射介紹
反射是.NET中的重要機(jī)制,通過(guò)反射,可以在運(yùn)行時(shí)獲得程序或程序集中每一個(gè)類型(包括類、結(jié)構(gòu)、委托、接口和枚舉等)的成員和成員的信息。
有了反射,即可對(duì)每一個(gè)類型了如指掌。另外我還可以直接創(chuàng)建對(duì)象,即使這個(gè)對(duì)象的類型在編譯時(shí)還不知道。
二.反射的用途
1.使用Assembly定義和加載程序集,加載在程序集清單中列出模塊,以及從此程序集中查找類型并創(chuàng)建該類型的實(shí)例
2.使用Module了解包含模塊的程序集以及模塊中的類等,還可以獲取在模塊上定義的所有全局方法或其他特定的非全局方法
3.使用ConstructorInfo了解構(gòu)造函數(shù)的名稱、參數(shù)、訪問(wèn)修飾符(如pulic 或private)和實(shí)現(xiàn)詳細(xì)信息(如abstract或virtual)等
4.使用MethodInfo了解方法的名稱、返回類型、參數(shù)、訪問(wèn)修飾符(如pulic 或private)和實(shí)現(xiàn)詳細(xì)信息(如abstract或virtual)等
5.使用FiedInfo了解字段的名稱、訪問(wèn)修飾符(如public或private)和實(shí)現(xiàn)詳細(xì)信息(如static)等,并獲取或設(shè)置字段值
6.使用EventInfo了解事件的名稱、事件處理程序數(shù)據(jù)類型、自定義屬性、聲明類型和反射類型等,添加或移除事件處理程序
7.使用PropertyInfo了解屬性的名稱、數(shù)據(jù)類型、聲明類型、反射類型和只讀或可寫(xiě)狀態(tài)等,獲取或設(shè)置屬性值
8.使用ParameterInfo了解參數(shù)的名稱、數(shù)據(jù)類型、是輸入?yún)?shù)還是輸出參數(shù),以及參數(shù)在方法簽名中的位置等
三.反射中主要用到的類介紹
1.System.Reflection.Assembly類
用于訪問(wèn)給定程序集的信息,或者把這個(gè)程序集加載到程序中
?
?
?部分方法介紹:
?
?2.System.Type類?
?System.Type 類對(duì)于反射起著核心的作用。但它是一個(gè)抽象的基類,Type有與每種數(shù)據(jù)類型對(duì)應(yīng)的派生類,
?我們使用這個(gè)派生類的對(duì)象的方法、字段、屬性來(lái)查找有關(guān)該類型的所有信息
?
?Type類的部分屬性:
??????? Name 數(shù)據(jù)類型名
??????? FullName 數(shù)據(jù)類型的完全限定名(包括命名空間名)
??????? Namespace 定義數(shù)據(jù)類型的命名空間名
??????? IsAbstract 指示該類型是否是抽象類型
??????? IsArray?? 指示該類型是否是數(shù)組
??????? IsClass?? 指示該類型是否是類
??????? IsEnum?? 指示該類型是否是枚舉
??????? IsInterface??? 指示該類型是否是接口
??????? IsPublic 指示該類型是否是公有的
??????? IsSealed 指示該類型是否是密封類
??????? IsValueType 指示該類型是否是值類型
??Type類的部分方法介紹:
??????? GetConstructor(), GetConstructors():返回ConstructorInfo類型,用于取得該類的構(gòu)造函數(shù)的信息
??????? GetEvent(), GetEvents():返回EventInfo類型,用于取得該類的事件的信息
??????? GetField(), GetFields():返回FieldInfo類型,用于取得該類的字段(成員變量)的信息
??????? GetInterface(), GetInterfaces():返回InterfaceInfo類型,用于取得該類實(shí)現(xiàn)的接口的信息
??????? GetMember(), GetMembers():返回MemberInfo類型,用于取得該類的所有成員的信息
??????? GetMethod(), GetMethods():返回MethodInfo類型,用于取得該類的方法的信息
??????? GetProperty(), GetProperties():返回PropertyInfo類型,用于取得該類的屬性的信息
? ? ? ?可以調(diào)用這些成員,其方式是調(diào)用Type的InvokeMember()方法,或者調(diào)用MethodInfo, PropertyInfo和其他類的Invoke()方法。?
學(xué)習(xí)可以參考:
https://docs.microsoft.com/zh-cn/dotnet/api/system.reflection.assembly?view=netcore-3.1
https://docs.microsoft.com/zh-cn/dotnet/api/system.type?view=netcore-3.1
?
?
總結(jié)
以上是生活随笔為你收集整理的Reflection(反射)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python3.6:根据m3u8下载mp
- 下一篇: 获取level2行情接口的功能详解