.NET幫助 C# 反射(對於開發者的運行原理) Curtis Chau 更新日期:6月 22, 2025 Download IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article 在軟體開發的世界中,C#是一種多功能且強大的編程語言,提供給開發人員廣泛的功能。 其中一個以其靈活性和動態性而著稱的功能是反射。 C# 中的反射允許開發人員檢查和交互類型的元數據在運行時。這種能力開闢了一個新的可能性,讓開發人員能夠創建更加靈活、可擴展和健壯的應用程序。 在這篇文章中,我們將深入探討 C# 反射的複雜性,探索其關鍵概念、使用案例和最佳實踐。 我們還將找到 IronPDF 的 PdfDocument 對象的反射信息。 在C#中的反射 反射是一種機制,允許程序在運行時檢查和操縱其結構和行為。在 C# 中,這是通過 System.Reflection 命名空間實現的,該命名空間提供了與元數據交互的類別和方法,獲取有關類型的信息,甚至是動態創建實例。 反射的關鍵組件 Type 類別 C# 反射的核心是 Type 類,這代表 .NET 運行環境中的一種類型。這個類別提供了有關一種類型的豐富信息,包括所有公共方法、屬性、字段、事件和方法參數。 您可以使用多種方法獲取給定類型的 Type 對象,例如 typeof() 運算符或在對象上調用 GetType() 方法。 using System; class Program { static void Main() { // Using typeof to get Type information for string Type stringType = typeof(string); Console.WriteLine("Information about the string type:"); Console.WriteLine($"Type Name: {stringType.Name}"); Console.WriteLine($"Full Name: {stringType.FullName}"); Console.WriteLine($"Assembly Qualified Name: {stringType.AssemblyQualifiedName}"); } } using System; class Program { static void Main() { // Using typeof to get Type information for string Type stringType = typeof(string); Console.WriteLine("Information about the string type:"); Console.WriteLine($"Type Name: {stringType.Name}"); Console.WriteLine($"Full Name: {stringType.FullName}"); Console.WriteLine($"Assembly Qualified Name: {stringType.AssemblyQualifiedName}"); } } Imports System Friend Class Program Shared Sub Main() ' Using typeof to get Type information for string Dim stringType As Type = GetType(String) Console.WriteLine("Information about the string type:") Console.WriteLine($"Type Name: {stringType.Name}") Console.WriteLine($"Full Name: {stringType.FullName}") Console.WriteLine($"Assembly Qualified Name: {stringType.AssemblyQualifiedName}") End Sub End Class $vbLabelText $csharpLabel 輸出 !C# 反射 (開發者的工作原理): 圖 1 Assembly 類別 .NET 中的組件是部署和版本管理的單位。 在 System.Reflection 命名空間中的 Assembly 類別提供了加載和描述組件並動態檢查組件信息的方法。 您可以為當前執行的組件或任何引用的組件獲取 Assembly 對象。 using System; using System.Reflection; class Program { static void Main() { // Example 1: Get information about the executing assembly Assembly executingAssembly = Assembly.GetExecutingAssembly(); Console.WriteLine("Information about the executing assembly:"); DisplayAssemblyInfo(executingAssembly); // Example 2: Load the mscorlib assembly Assembly mscorlibAssembly = Assembly.Load("mscorlib"); Console.WriteLine("\nInformation about the mscorlib assembly:"); DisplayAssemblyInfo(mscorlibAssembly); } static void DisplayAssemblyInfo(Assembly assembly) { Console.WriteLine($"Assembly Name: {assembly.GetName().Name}"); Console.WriteLine($"Full Name: {assembly.FullName}"); Console.WriteLine($"Location: {assembly.Location}"); Console.WriteLine("\nModules:"); foreach (var module in assembly.GetModules()) { Console.WriteLine($"- {module.Name}"); } Console.WriteLine(new string('-', 30)); } } using System; using System.Reflection; class Program { static void Main() { // Example 1: Get information about the executing assembly Assembly executingAssembly = Assembly.GetExecutingAssembly(); Console.WriteLine("Information about the executing assembly:"); DisplayAssemblyInfo(executingAssembly); // Example 2: Load the mscorlib assembly Assembly mscorlibAssembly = Assembly.Load("mscorlib"); Console.WriteLine("\nInformation about the mscorlib assembly:"); DisplayAssemblyInfo(mscorlibAssembly); } static void DisplayAssemblyInfo(Assembly assembly) { Console.WriteLine($"Assembly Name: {assembly.GetName().Name}"); Console.WriteLine($"Full Name: {assembly.FullName}"); Console.WriteLine($"Location: {assembly.Location}"); Console.WriteLine("\nModules:"); foreach (var module in assembly.GetModules()) { Console.WriteLine($"- {module.Name}"); } Console.WriteLine(new string('-', 30)); } } Imports Microsoft.VisualBasic Imports System Imports System.Reflection Friend Class Program Shared Sub Main() ' Example 1: Get information about the executing assembly Dim executingAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly() Console.WriteLine("Information about the executing assembly:") DisplayAssemblyInfo(executingAssembly) ' Example 2: Load the mscorlib assembly Dim mscorlibAssembly As System.Reflection.Assembly = System.Reflection.Assembly.Load("mscorlib") Console.WriteLine(vbLf & "Information about the mscorlib assembly:") DisplayAssemblyInfo(mscorlibAssembly) End Sub Private Shared Sub DisplayAssemblyInfo(ByVal assembly As System.Reflection.Assembly) Console.WriteLine($"Assembly Name: {assembly.GetName().Name}") Console.WriteLine($"Full Name: {assembly.FullName}") Console.WriteLine($"Location: {assembly.Location}") Console.WriteLine(vbLf & "Modules:") For Each [module] In assembly.GetModules() Console.WriteLine($"- {[module].Name}") Next [module] Console.WriteLine(New String("-"c, 30)) End Sub End Class $vbLabelText $csharpLabel 輸出 !C# 反射 (開發者的工作原理): 圖 2 MethodInfo、PropertyInfo、FieldInfo 和 EventInfo 類 這些類別分別代表公共成員、方法、屬性、字段和事件。 它們暴露這些成員的相關信息,例如它們的名稱、類型、可訪問性等等。 您可以通過 Type 類獲得這些類別的實例訪問權限。 using System; using System.Reflection; class MyClass { public void MyMethod() { } public int MyProperty { get; set; } public string myField; public event EventHandler MyEvent; } class Program { static void Main() { // Get MethodInfo for MyMethod MethodInfo methodInfo = typeof(MyClass).GetMethod("MyMethod"); Console.WriteLine($"Method Name: {methodInfo.Name}"); // Get PropertyInfo for MyProperty PropertyInfo propertyInfo = typeof(MyClass).GetProperty("MyProperty"); Console.WriteLine($"Property Name: {propertyInfo.Name}"); // Get FieldInfo for myField FieldInfo fieldInfo = typeof(MyClass).GetField("myField"); Console.WriteLine($"Field Name: {fieldInfo.Name}"); // Get EventInfo for MyEvent EventInfo eventInfo = typeof(MyClass).GetEvent("MyEvent"); Console.WriteLine($"Event Name: {eventInfo.Name}"); } } using System; using System.Reflection; class MyClass { public void MyMethod() { } public int MyProperty { get; set; } public string myField; public event EventHandler MyEvent; } class Program { static void Main() { // Get MethodInfo for MyMethod MethodInfo methodInfo = typeof(MyClass).GetMethod("MyMethod"); Console.WriteLine($"Method Name: {methodInfo.Name}"); // Get PropertyInfo for MyProperty PropertyInfo propertyInfo = typeof(MyClass).GetProperty("MyProperty"); Console.WriteLine($"Property Name: {propertyInfo.Name}"); // Get FieldInfo for myField FieldInfo fieldInfo = typeof(MyClass).GetField("myField"); Console.WriteLine($"Field Name: {fieldInfo.Name}"); // Get EventInfo for MyEvent EventInfo eventInfo = typeof(MyClass).GetEvent("MyEvent"); Console.WriteLine($"Event Name: {eventInfo.Name}"); } } Imports System Imports System.Reflection Friend Class [MyClass] Public Sub MyMethod() End Sub Public Property MyProperty() As Integer Public myField As String Public Event MyEvent As EventHandler End Class Friend Class Program Shared Sub Main() ' Get MethodInfo for MyMethod Dim methodInfo As MethodInfo = GetType([MyClass]).GetMethod("MyMethod") Console.WriteLine($"Method Name: {methodInfo.Name}") ' Get PropertyInfo for MyProperty Dim propertyInfo As PropertyInfo = GetType([MyClass]).GetProperty("MyProperty") Console.WriteLine($"Property Name: {propertyInfo.Name}") ' Get FieldInfo for myField Dim fieldInfo As FieldInfo = GetType([MyClass]).GetField("myField") Console.WriteLine($"Field Name: {fieldInfo.Name}") ' Get EventInfo for MyEvent Dim eventInfo As EventInfo = GetType([MyClass]).GetEvent("MyEvent") Console.WriteLine($"Event Name: {eventInfo.Name}") End Sub End Class $vbLabelText $csharpLabel 輸出 !C# 反射 (開發者的工作原理): 圖 3 介绍 IronPDF IronPDF - 官方網站 是一個強大的 C# 庫,提供全面的功能集,用於在 .NET 應用程序中處理 PDF 文檔。 它允許開發人員輕鬆地創建、操作和從現有對象中提取數據,例如利用簡單而直觀的 API 處理 PDF 文件。 IronPDF 的一個顯著特徵是能夠無縫集成現有 C# 項目,使其成為新增 PDF 生成和處理能力的絕佳選擇。 IronPDF的核心特性 IronPDF 的一些關鍵功能如下: PDF 生成: 輕鬆從頭生成 PDF 文檔或將 HTML、圖像及其他格式轉換為 PDF。 PDF 操作: 通過添加、刪除或修改文本、圖像和註釋編輯現有的 PDF。 PDF 提取: 從 PDF 文件中提取文本、圖像和元數據以進一步處理。 HTML 到 PDF 轉換: 將HTML內容,包括CSS和JavaScript,轉換為高質量的PDF。 PDF 表單: 程序化創建和填寫互動式 PDF 表格。 安全性: 應用加密和密碼保護以保護 PDF 文檔。 現在,讓我們深入探討如何使用 C# 反射與 IronPDF 在一個詳細的代碼示例中。 使用 C# 反射與 IronPDF 在這個簡單的例子中,我們將使用 C# 反射獲取 IronPDF PDF 文檔對象的信息。 安裝 IronPDF NuGet 套件 確保在您的項目中安裝 IronPDF NuGet 軟件包。 您可以使用 NuGet 包管理器控制台來執行此操作: Install-Package IronPdf 使用 C# 反射獲取 IronPDF PDF 文檔對象數據 using IronPdf; using System; using System.Reflection; class Program { static void Main() { // Get the Type object representing PdfDocument Type pdfDocumentType = typeof(PdfDocument); // Display basic information about the PdfDocument type Console.WriteLine("Information about the PdfDocument type:"); Console.WriteLine($"Type Name: {pdfDocumentType.Name}"); Console.WriteLine($"Full Name: {pdfDocumentType.FullName}"); Console.WriteLine($"Assembly Qualified Name: {pdfDocumentType.AssemblyQualifiedName}"); Console.WriteLine("\nMembers:"); // Iterate over all members and display their information foreach (var memberInfo in pdfDocumentType.GetMembers()) { Console.WriteLine($"{memberInfo.MemberType} {memberInfo.Name}"); } } } using IronPdf; using System; using System.Reflection; class Program { static void Main() { // Get the Type object representing PdfDocument Type pdfDocumentType = typeof(PdfDocument); // Display basic information about the PdfDocument type Console.WriteLine("Information about the PdfDocument type:"); Console.WriteLine($"Type Name: {pdfDocumentType.Name}"); Console.WriteLine($"Full Name: {pdfDocumentType.FullName}"); Console.WriteLine($"Assembly Qualified Name: {pdfDocumentType.AssemblyQualifiedName}"); Console.WriteLine("\nMembers:"); // Iterate over all members and display their information foreach (var memberInfo in pdfDocumentType.GetMembers()) { Console.WriteLine($"{memberInfo.MemberType} {memberInfo.Name}"); } } } Imports Microsoft.VisualBasic Imports IronPdf Imports System Imports System.Reflection Friend Class Program Shared Sub Main() ' Get the Type object representing PdfDocument Dim pdfDocumentType As Type = GetType(PdfDocument) ' Display basic information about the PdfDocument type Console.WriteLine("Information about the PdfDocument type:") Console.WriteLine($"Type Name: {pdfDocumentType.Name}") Console.WriteLine($"Full Name: {pdfDocumentType.FullName}") Console.WriteLine($"Assembly Qualified Name: {pdfDocumentType.AssemblyQualifiedName}") Console.WriteLine(vbLf & "Members:") ' Iterate over all members and display their information For Each memberInfo In pdfDocumentType.GetMembers() Console.WriteLine($"{memberInfo.MemberType} {memberInfo.Name}") Next memberInfo End Sub End Class $vbLabelText $csharpLabel 提供的 C# 代碼利用反射來獲取 IronPDF 庫中的 PdfDocument 類型的信息。 首先,使用 typeof(PdfDocument) 表達式檢索表示 PdfDocument 類型的 Type 對象。 接著,將獲得的 Type 對象的各種屬性,包括類型名稱、完整名稱和程序集限定名稱,打印到控制台。 此外,代碼使用 foreach 循環迭代 PdfDocument 類型的成員,打印有關每個成員的信息,例如其成員類型和名稱。 這種方法展示了使用反射在運行時動態檢查 PdfDocument 類型的對象結構和元數據,提供了關於 IronPDF 庫 PdfDocument 類中所有公共成員的見解。 输出: !C# 反射 (開發者的工作原理): 圖 4 結論 C# 反射是一種強大的機制,使開發者可以在運行時動態檢查和操縱類型的結構。 本文探討了與 C# 反射相關的關鍵概念、使用案例和最佳實踐,強調了其在創建靈活和可擴展應用程序中的重要性。 此外,集成了一個強大的 PDF 操作庫 IronPDF,進一步展示了 C# 反射的多功能性,可以動態獲得有關 PdfDocument 類型的信息。 當開發者利用這些能力時,他們可以靈活地將他們的應用程序適應不斷變化的需求和場景,這展示了 C# 的動態特性以及 IronPDF 等庫在提升文檔處理能力方面的貢獻。 IronPDF 是一個文檔完善的庫,擁有眾多教程。 要查看教程,請訪問 IronPDF 教程文檔,這為開發人員提供了學習其功能的更大機會。 常見問題解答 什麼是C#反射及其重要性? C#反射是一項允許開發者在運行時檢查和操作類型元數據的功能。它很重要,因為它在應用程式開發中提供了靈活性和動態性,使開發者能創建更具適應性和可擴展的軟體。 如何使用反射在C#中與PDF文檔互動? 您可以使用C#反射來動態獲取IronPDF中的PdfDocument類型的信息。這允許您在運行時檢查PdfDocument類的結構、組成和公共成員,方便動態PDF文檔操作。 C#反射的一些常見使用例是什麼? C#反射的常見使用例包括動態類型檢查、創建可擴展應用程式、訪問元數據、動態加載組件和自動化代碼生成。它增強了軟體開發的靈活性和適應性。 Type類如何促進C#中的反射? C#中的Type類提供了類型的信息,如其方法、屬性、字段和事件。開發者可以使用typeof()運算符或GetType()方法獲取Type對象,並使用它來訪問元數據,使得動態檢查和類型的交互成為可能。 能否舉例說明如何使用IronPDF進行反射? 使用IronPDF進行反射的一個例子是獲得PdfDocument對象的反射信息。這讓開發者可以動態檢查PDF文檔的結構和元數據,展示IronPDF在PDF生成、操作和提取方面的能力。 開發者在使用C#反射時應考慮什麼? 在使用C#反射時,開發者應考慮將其使用降至最低以減少潛在的性能開銷,確保安全處理動態加載的類型,並謹慎使用反射以確保其好處超過成本的情況下使用。 Assembly類如何在C#反射中被利用? System.Reflection中的Assembly類提供了加載和檢查組件的方法。它讓開發者可以訪問組件元數據,探索模塊信息,並在運行時動態加載和描述組件,促進動態軟體管理。 將PDF庫與C#集成有什麼優勢? 將像IronPDF這樣的PDF庫與C#集成使開發者可以無縫地將PDF生成和操作功能添加到他們的應用程序中。它提供了PDF創建、編輯、表單處理和安全性等功能,增強.NET應用程式中的文檔處理工作流程。 Curtis Chau 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 相關文章 更新日期 9月 4, 2025 RandomNumberGenerator C# 使用RandomNumberGenerator C#類可以幫助將您的PDF生成和編輯項目提升至新水準 閱讀更多 更新日期 9月 4, 2025 C#字符串等於(它如何對開發者起作用) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 更新日期 8月 5, 2025 C#開關模式匹配(對開發者來說是如何工作的) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 NPlot C#(開發者的工作原理)Npgsql C# .NET(對於開發者的...