程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 反射,java反射

反射,java反射

編輯:關於.NET

反射,java反射


反射  

  System.Reflection 命名空間下的類與 System.Type 命名空間使你能夠獲取有關加載的程序集和其中定義的類型的有關信息,如類、接口和值類型等。 可以使用反射在運行時創建、調用和訪問類型實例。

  CLR 程序管理應用程序域,應用程序域構成具有相同應用程序范圍的對象周圍定義的邊界。此管理包括將每個程序集加載到相應的應用程序域中和控制每個程序集內的類型層次結構的內存布局。

 

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

  • 使用 Assembly 來定義和加載程序集,加載程序集清單中列出的模塊,以及在此程序集中定位一個類型並創建一個它的實例。

  • 使用 Module 發現信息,如包含模塊的程序集和模塊中的類。 還可以獲取所有全局方法或模塊上定義的其它特定的非全局方法。

  • 使用 ConstructorInfo 發現信息,如名稱、參數、訪問修飾符(如 public 或 private)和構造函數的實現詳細信息(如 abstract 或virtual)。使用 Type 的 GetConstructors 或 GetConstructor 方法來調用特定構造函數。

  • 使用 MethodInfo 發現信息,如名稱、返回類型、參數、訪問修飾符(如 public 或 private)和方法的實現詳細信息(如 abstract 或virtual)。 使用 Type 的 GetMethods 或 GetMethod 方法來調用特定方法。

  • 使用 FieldInfo 發現信息,如名稱、訪問修飾符(如 public 或 private)和一個字段的實現詳細信息 (如 static);並獲取或設置字段值。

  • 使用 EventInfo 發現信息(如名稱、事件處理程序的數據類型、自定義特性、聲明類型以及事件的反射的類型),並添加或刪除事件處理程序。

  • 使用 PropertyInfo 發現信息(如名稱、數據類型、聲明類型,反射的類型和屬性的只讀或可寫狀態),並獲取或設置屬性值。

  • 使用 ParameterInfo 發現信息,如參數的名稱、數據類型、參數是輸入參數還是輸出參數以及參數在方法簽名中的位置。

  • 使用 CustomAttributeData 在於應用程序域的僅反射上下文中工作時發現有關自定義特性的信息。 CustomAttributeData 使你能夠檢查特性,而無需創建它們的實例。

 

  System.Reflection.Emit 命名空間的類提供一種專用形式的反射,使你能夠在運行時生成類型。

  還可以使用反射來創建稱為類型浏覽器的應用程序,它使用戶能夠選擇類型,然後查看有關這些類型的信息。

  反射還有其它用途。 JScript 等語言的編譯器使用反射來構造符號表。 System.Runtime.Serialization 命名空間中的類使用反射來訪問數據並確定要保存哪些字段。 System.Runtime.Remoting 命名空間中的類通過序列化間接使用反射。

 

反射中的運行時類型

  反射提供類(如 Type 和 MethodInfo),用於表示類型、成員、參數和其它代碼實體。 但使用反射時,你並不直接使用這些類,其中大部分類均是抽象的。 相反,你使用由公共語言運行時 (CLR) 提供的類型。

  例如,使用 C# typeof 運算符獲取 Type 對象時,該對象實際上是 RuntimeType。 RuntimeType 派生自 Type,並提供所有抽象方法的實現。

  這些運行時類是 internal。 它們沒有與其基類分開記錄,因為它們的行為由基類文檔來描述。

 

 

【參考】微軟官方文檔

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved