Reflection(反射)


一.反射介紹

反射是.NET中的重要機制,通過反射,可以在運行時獲得程序或程序集中每一個類型(包括類、結構、委托、接口和枚舉等)的成員和成員的信息。

有了反射,即可對每一個類型了如指掌。另外我還可以直接創建對象,即使這個對象的類型在編譯時還不知道。

二.反射的用途

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

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

3.使用ConstructorInfo了解構造函數的名稱、參數、訪問修飾符(如pulic 或private)和實現詳細信息(如abstract或virtual)等

4.使用MethodInfo了解方法的名稱、返回類型、參數、訪問修飾符(如pulic 或private)和實現詳細信息(如abstract或virtual)等

5.使用FiedInfo了解字段的名稱、訪問修飾符(如public或private)和實現詳細信息(如static)等,並獲取或設置字段值

6.使用EventInfo了解事件的名稱、事件處理程序數據類型、自定義屬性、聲明類型和反射類型等,添加或移除事件處理程序

7.使用PropertyInfo了解屬性的名稱、數據類型、聲明類型、反射類型和只讀或可寫狀態等,獲取或設置屬性值

8.使用ParameterInfo了解參數的名稱、數據類型、是輸入參數還是輸出參數,以及參數在方法簽名中的位置等

三.反射中主要用到的類介紹

1.System.Reflection.Assembly類

用於訪問給定程序集的信息,或者把這個程序集加載到程序中

 

 

 部分方法介紹:

 

 2.System.Type類 

 System.Type 類對於反射起着核心的作用。但它是一個抽象的基類,Type有與每種數據類型對應的派生類,

 我們使用這個派生類的對象的方法、字段、屬性來查找有關該類型的所有信息

 

 Type類的部分屬性:
        Name 數據類型名
        FullName 數據類型的完全限定名(包括命名空間名)
        Namespace 定義數據類型的命名空間名
        IsAbstract 指示該類型是否是抽象類型
        IsArray   指示該類型是否是數組
        IsClass   指示該類型是否是類
        IsEnum   指示該類型是否是枚舉
        IsInterface    指示該類型是否是接口
        IsPublic 指示該類型是否是公有的
        IsSealed 指示該類型是否是密封類
        IsValueType 指示該類型是否是值類型

  Type類的部分方法介紹:
        GetConstructor(), GetConstructors():返回ConstructorInfo類型,用於取得該類的構造函數的信息
        GetEvent(), GetEvents():返回EventInfo類型,用於取得該類的事件的信息
        GetField(), GetFields():返回FieldInfo類型,用於取得該類的字段(成員變量)的信息
        GetInterface(), GetInterfaces():返回InterfaceInfo類型,用於取得該類實現的接口的信息
        GetMember(), GetMembers():返回MemberInfo類型,用於取得該類的所有成員的信息
        GetMethod(), GetMethods():返回MethodInfo類型,用於取得該類的方法的信息
        GetProperty(), GetProperties():返回PropertyInfo類型,用於取得該類的屬性的信息
       可以調用這些成員,其方式是調用Type的InvokeMember()方法,或者調用MethodInfo, PropertyInfo和其他類的Invoke()方法。 

學習可以參考:

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM