跳過到頁腳內容
.NET幫助

C# Partial(對於開發者的運行原理)

C# 提供了一個獨特的功能來提升大型專案中程式碼的組織和管理:部分關鍵字類別。 這個功能可以通過 partial 修飾符來訪問,允許開發者將類別、界面或結構的定義分散在多個文件中。 這種能力對於處理已生成的源代碼特別有益,比如用戶界面控制定義或服務包裝器代碼,與定製的業務邏輯一起使用。 在這篇文章中,我們將學習有關部分類別以及如何在 Visual Studio 中使用IronPDF PDF Library for .NET

認識部分類別

一個保持相同可訪問性級別的部分類別,是在 C# 中使用 partial 修飾符定義的,表示該類別的定義分佈在同一程序集的兩個或更多文件中。 這種方法保持了相關代碼的統一,同時維持了關注點的分離。 例如,部分類別 Employee 可能在一個文件中有其業務邏輯,而在另一個文件中有其數據訪問層,但這兩部分都被編譯為單一類別。 這種分離不僅使代碼更易於管理,還允許多個開發者同時處理相同類別而不會發生衝突。

// File 1: Employee_BusinessLogic.cs
public partial class Employee
{
    // Method for calculating pay
    public void CalculatePay() 
    { 
        // Implementation of pay calculation
    }
}

// File 2: Employee_DataAccess.cs
public partial class Employee
{
    // Method for loading employee data
    public void Load() 
    { 
        // Implementation of data loading
    }
}
// File 1: Employee_BusinessLogic.cs
public partial class Employee
{
    // Method for calculating pay
    public void CalculatePay() 
    { 
        // Implementation of pay calculation
    }
}

// File 2: Employee_DataAccess.cs
public partial class Employee
{
    // Method for loading employee data
    public void Load() 
    { 
        // Implementation of data loading
    }
}
$vbLabelText   $csharpLabel

利用部分方法

部分類別也可以定義部分方法,這些方法被宣告但不一定要實現。 這些方法使類別的一部分可以宣告一個方法而不實現它,允許類別的另一部分選擇性地實現它。 如果沒有提供實現,部分方法調用在編譯時被移除,這樣不會影響性能。

// File 1: Employee_BusinessLogic.cs
public partial class Employee
{
    // Declaration of a partial method to be called when pay is calculated
    partial void OnPayCalculated(double amount);

    public void CalculatePay()
    {
        double amount = 1000; // Simplified calculation
        OnPayCalculated(amount); // Call the partial method
    }
}

// File 2: Employee_Events.cs
public partial class Employee
{
    // Implementation of the partial method
    partial void OnPayCalculated(double amount)
    {
        Console.WriteLine($"Pay calculated: {amount}");
    }
}
// File 1: Employee_BusinessLogic.cs
public partial class Employee
{
    // Declaration of a partial method to be called when pay is calculated
    partial void OnPayCalculated(double amount);

    public void CalculatePay()
    {
        double amount = 1000; // Simplified calculation
        OnPayCalculated(amount); // Call the partial method
    }
}

// File 2: Employee_Events.cs
public partial class Employee
{
    // Implementation of the partial method
    partial void OnPayCalculated(double amount)
    {
        Console.WriteLine($"Pay calculated: {amount}");
    }
}
$vbLabelText   $csharpLabel

部分方法的進階應用

部分方法,體現了部分定義的方法,使得在部分類別的一部分中進行聲明,但在另一部分中進行可選的實現。 這個功能對於提供選擇性由開發者實現的鉤子在生成的代碼中特別有用。 partial 關鍵字表示該方法可能會或者不會有實現。

考慮一個例子,其中 UI 組件需要在用戶界面控制加載之前執行某些動作。 部分方法提供了一種清晰的方法來插入自定義的業務邏輯,而不破壞自動生成的代碼。

// File: UIControls_AutoGenerated.cs
public partial class UIControls
{
    // Declaration of a partial method for control loading
    partial void OnControlLoading();

    public void LoadControl()
    {
        OnControlLoading(); // Call the partial method
        // Auto-generated loading logic here
    }
}

// File: UIControls_CustomLogic.cs
public partial class UIControls
{
    // Implementation of the partial method for adding custom logic
    partial void OnControlLoading()
    {
        // Custom business logic code here
        Console.WriteLine("Custom control loading logic executed.");
    }
}
// File: UIControls_AutoGenerated.cs
public partial class UIControls
{
    // Declaration of a partial method for control loading
    partial void OnControlLoading();

    public void LoadControl()
    {
        OnControlLoading(); // Call the partial method
        // Auto-generated loading logic here
    }
}

// File: UIControls_CustomLogic.cs
public partial class UIControls
{
    // Implementation of the partial method for adding custom logic
    partial void OnControlLoading()
    {
        // Custom business logic code here
        Console.WriteLine("Custom control loading logic executed.");
    }
}
$vbLabelText   $csharpLabel

將業務邏輯與部分類別整合

業務邏輯通常需要超出自動生成內容之外的修改和擴展,尤其是在具有複雜規則或行為的應用程式中。 部分類別提供了一種無縫的方式在不更改自動生成的 UI 或數據訪問代碼的情況下,在一個單獨的源文件中包含業務邏輯。 這種分離確保業務邏輯可以由開發者輕鬆訪問和修改,提高了合作,特別是在多個開發者參與專案時。

// File: Employee_AutoGenerated.cs
public partial class Employee
{
    // Auto-generated properties and methods
}

// File: Employee_BusinessLogic.cs
public partial class Employee
{
    // Business logic method for promoting an employee
    public void Promote()
    {
        // Business logic code to promote an employee
        Console.WriteLine("Employee promoted.");
    }
}
// File: Employee_AutoGenerated.cs
public partial class Employee
{
    // Auto-generated properties and methods
}

// File: Employee_BusinessLogic.cs
public partial class Employee
{
    // Business logic method for promoting an employee
    public void Promote()
    {
        // Business logic code to promote an employee
        Console.WriteLine("Employee promoted.");
    }
}
$vbLabelText   $csharpLabel

嵌套的部分類型

嵌套的部分類型將部分類別的概念擴展到嵌套類別,使得嵌套類別的某些部分可以在不同的文件中定義。 這在組織大型嵌套結構中特別有用,比如包含多個嵌套類型來處理控制性行為的各個方面的複雜用戶界面控件定義。

// File: ComplexControl_Part1.cs
public partial class ComplexControl
{
    public partial class NestedControl
    {
        // Method for initializing the nested control
        public void Initialize() 
        { 
            // Initialization code here 
        }
    }
}

// File: ComplexControl_Part2.cs
public partial class ComplexControl
{
    public partial class NestedControl
    {
        // Method for cleaning up the nested control
        public void Cleanup() 
        { 
            // Cleanup code here 
        }
    }
}
// File: ComplexControl_Part1.cs
public partial class ComplexControl
{
    public partial class NestedControl
    {
        // Method for initializing the nested control
        public void Initialize() 
        { 
            // Initialization code here 
        }
    }
}

// File: ComplexControl_Part2.cs
public partial class ComplexControl
{
    public partial class NestedControl
    {
        // Method for cleaning up the nested control
        public void Cleanup() 
        { 
            // Cleanup code here 
        }
    }
}
$vbLabelText   $csharpLabel

實際應用

部分類別在涉及自動生成源代碼的場景中特別有益,例如 Forms,其中 Visual Studio 創建 Windows Forms。 這種設置允許開發者在一個不同的源文件中分開設計 UI 代碼,使開發者能夠擴展或修改類別而不影響原始 UI 設計。

在 Web 應用程式中,部分類別有助於將生成的 Web 服務包裝器代碼與自定義的業務邏輯分開,確保 Web 服務的更新不會覆蓋自定義的修改。 同樣,在使用 LINQ to SQL 的應用程式中,dbml 文件生成的部分類別定義可以擴展以包含其他功能或業務邏輯,而不觸及自動生成的代碼。

// Auto-generated UI class
public partial class MainForm : Form
{
    // Designer code
}

// Custom logic for MainForm
public partial class MainForm
{
    // Custom event handlers and methods
}
// Auto-generated UI class
public partial class MainForm : Form
{
    // Designer code
}

// Custom logic for MainForm
public partial class MainForm
{
    // Custom event handlers and methods
}
$vbLabelText   $csharpLabel

IronPDF: C# PDF程式庫

C# Partial (How It Works For Developers): Figure 1 - IronPDF

IronPDF 是一個用於 .NET 的綜合程式庫,允許開發者在其應用程式中創建、閱讀和編輯 PDF 文件。 它提供了一種簡單的方法來從 HTML、URL、圖片、ASPX 和文字生成 PDF,使其成為報告、文件生成和 Web 內容歸檔的多功能工具。 IronPDF 以其易用性而聞名,集成到任何 .NET 專案中只需最小的設置,包括由 C# 開發的應用程式。

將 IronPDF 與部分類別整合

為了說明 IronPDF 與部分類別的集成,讓我們考慮一個生成 PDF 格式報告的 Web 應用程式的例子。 我們將把功能分開以保持業務邏輯與 PDF 生成邏輯的分離。

設置 IronPDF

首先,確保將 IronPDF 添加到您的專案中。 這通常可以通過 NuGet Package Manager 使用以下命令完成:

Install-Package IronPdf

為報告生成創建部分類別

我們將把類分為兩部分:一個用於與報告數據相關的業務邏輯,另一個使用 IronPDF 進行 PDF 生成。

文件 1: ReportGenerator_BusinessLogic.cs

此文件包含準備報告數據的業務邏輯。

public partial class ReportGenerator
{
    // Method to get data for the report
    public IEnumerable<string> GetDataForReport()
    {
        // Imagine this method fetches and prepares data for the report
        return new List<string> { "Data1", "Data2", "Data3" };
    }
}
public partial class ReportGenerator
{
    // Method to get data for the report
    public IEnumerable<string> GetDataForReport()
    {
        // Imagine this method fetches and prepares data for the report
        return new List<string> { "Data1", "Data2", "Data3" };
    }
}
$vbLabelText   $csharpLabel

文件 2: ReportGenerator_PdfGeneration.cs

此文件利用 IronPDF 從準備好的數據生成 PDF 報告。

public partial class ReportGenerator
{
    // Method to generate PDF report using IronPDF
    public void GeneratePdfReport()
    {
        var renderer = new IronPdf.ChromePdfRenderer();
        var data = GetDataForReport();
        var htmlContent = $"<html><body><h1>Report</h1><p>{string.Join("</p><p>", data)}</p></body></html>";

        // Generate PDF from HTML string
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF to a file
        pdf.SaveAs("Report.pdf");
        Console.WriteLine("Report generated successfully.");
    }
}
public partial class ReportGenerator
{
    // Method to generate PDF report using IronPDF
    public void GeneratePdfReport()
    {
        var renderer = new IronPdf.ChromePdfRenderer();
        var data = GetDataForReport();
        var htmlContent = $"<html><body><h1>Report</h1><p>{string.Join("</p><p>", data)}</p></body></html>";

        // Generate PDF from HTML string
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF to a file
        pdf.SaveAs("Report.pdf");
        Console.WriteLine("Report generated successfully.");
    }
}
$vbLabelText   $csharpLabel

用法

使用部分類別設置後,生成 PDF 報告就變成調用 ReportGenerator 類實例上的 GeneratePdfReport 方法的問題。

var reportGenerator = new ReportGenerator();
reportGenerator.GeneratePdfReport();
var reportGenerator = new ReportGenerator();
reportGenerator.GeneratePdfReport();
$vbLabelText   $csharpLabel

C# Partial (How It Works For Developers): Figure 2 - PDF Report Output

結論

C# Partial (How It Works For Developers): Figure 3 - Licensing

在 C# 中使用部分類別、部分方法和嵌套的部分類型為開發者提供了一種靈活且強大的工具,用於代碼的組織和管理。 通過將自動生成的代碼與業務邏輯、用戶界面控制定義及應用程式的其他部分分開,開發者可以創建更具可維護性、可讀性和可擴展性的應用程式。

通過分開業務邏輯和 PDF 處理的關注點,開發者可以實現更好的代碼組織、可維護性和可擴展性。 IronPDF 的強大功能結合部分類別的組織優勢,為 .NET 開發者提供了一個強大的 PDF 處理工具集,適用於其專案中。 您可以使用IronPDF 的免費試用嘗試。 如果您有興趣購買,IronPDF 的授權從 $799 開始。

常見問題解答

使用 C# 局部類別的目的是什么?

C# 中的局部類別用於將一個類別、接口或結構的定义拆分到多個文件中。這對於將自動生成的代碼(如 UI 控件)與自定義業務邏輯分離特別有用,從而增強代碼管理和組織性。

在網路應用程序中,局部類別有哪些好處?

在網路應用程序中,局部類別允許開發人員將 UI 設計代碼與自定義業務邏輯分開。這種分離有助于保持清晰的代碼架構,從而更容易管理和擴展隨著應用程序的增長。

C# 中 partial 關鍵字的重要性是什么?

C# 中的 partial 關鍵字表示類別、接口或結構的定义分為不同文件中的幾個部分。這個特性對於管理大型代碼庫特別重要,尤其是在處理自動生成的代碼時。

您能否在 C# 中使用局部類別集成 PDF 生成功能?

是的,您可以在 C# 中使用局部類別集成 PDF 生成功能。通過使用像 IronPDF 这样的庫,可以将 PDF 生成邏輯分离到一個局部類別中,与其他业务逻辑区分開,增強代碼清晰度。

局部方法在局部類別中如何工作?

局部類別中的局部方法在類別的一個部分中声明而無實現,并且可以在另一部分中選择性地實現。如果局部方法被声明但未實現,它将在编译時被移除,從而避免性能负担。

什么是嵌套局部类型,它们的用途是什么?

嵌套局部类型允許嵌套类的一部分在不同文件中定义。這種組織工具對於管理复杂結構很有用,例如具有多個嵌套类型的用戶界面控件,從而實現更好的代碼管理。

.NET PDF 功能庫如何安装?

像 IronPDF 这样的 .NET PDF 功能庫可以通過 NuGet 包管理器安装。您可以使用特定于包的命令,例如:Install-Package IronPDF

使用局部類別進行協作開發有哪些优點?

局部類別有助于協作開發,允許多個開發人员在不發生代碼冲突的情况下在同一类的不同部分上工作。這是通過將類別拆分成多個文件來實現的,從而更容易管理并發修改。

如何在 C# 項目中组织生成 PDF 的逻辑?

在 C# 項目中可以使用局部類別将 PDF 生成逻辑与其他业务逻辑分開,從而提高代碼的可管理性和清晰度,特别是在使用 IronPDF 这样的庫進行 PDF 创建和操作時。

局部類別對自動生成的代碼有何用?

局部類別對自動生成的代碼特别有用,因為它们允許開發者在不更改自動生成的部分的情况下添加自定义逻辑。這种分隔确保對生成代碼的任何更新都不会干扰自定义實現。

Jacob Mellor, Team Iron 首席技術官
首席技術官

Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me