跳過到頁腳內容
.NET HELP

C# Partial (How It Works For Developers)

C# 提供了一個獨特的功能,可增強大型專案中代碼的組織與管理:局部關鍵字 class。 此功能可透過 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

使用部分類別整合業務邏輯

商業邏輯通常需要在自動產生的邏輯之外進行修改和延伸,尤其是在具有複雜規則或行為的應用程式中。 Partial classes 提供了一種無縫的方式,可將商業邏輯包含在獨立的原始碼檔案中,而不會改變自動產生的 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

部分類型的嵌套

Nested partial types 將部分類別的概念延伸到巢狀類別,允許在獨立的檔案中定義巢狀類的部分。 這對於組織大型巢狀結構特別有用,例如複雜的使用者介面控制定義,其中包含多個巢狀類型,用於處理控制行為的各個方面。

// 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

實際應用

部分類別對於涉及自動產生原始程式碼的情境特別有利,例如 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):圖 1 - IronPdf

IronPDF 是適用於 .NET 的全面性函式庫,可讓開發人員在其應用程式中建立、讀取和編輯 PDF 文件。 它提供了一種直接的方法來使用 IronPDF、URL、圖像、ASPX 和文字從 HTML 生成 PDF,使其成為報告、文件生成和網頁內容歸檔的多功能工具。 IronPDF 的優點在於其易用性,只需最少的設定即可整合至任何 .NET 專案,包括使用 C# 開發的應用程式。

將 IronPDF 與部分類別整合

為了說明 IronPDF 與部分類別的整合,讓我們考慮一個範例,我們有一個網頁應用程式,可以產生 PDF 格式的報表。 我們將在部分類別檔案中分割功能,以保持業務邏輯與 PDF 產生邏輯分離。

設定 IronPDF

首先,確保 IronPDF 已加入您的專案。 通常可透過 NuGet Package Manager 使用下列指令完成:

Install-Package IronPdf

建立報告產生的部分類別

我們將課程分為兩部分:一部分是與報表資料相關的業務邏輯,另一部分是使用 IronPDF 產生 PDF。

檔案 1:報表產生器_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

用途

有了部分類別的設定,只要在 ReportGenerator 類的實體上呼叫 GeneratePdfReport 方法,就可以產生 PDF 報告。

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

C# Partial (How It Works For Developers):圖 2 - PDF 報告輸出

結論

C# Partial (How It Works For Developers):圖 3 - 授權

C# 中部分類別、部分方法和巢狀部分類型的使用,為開發人員提供了靈活且強大的程式碼組織與管理工具。 透過將自動產生的程式碼與商業邏輯、使用者介面控制定義以及應用程式的其他部分分離,開發人員可以建立更具維護性、可讀性與可擴充性的應用程式。

透過分開商業邏輯和 PDF 處理的關注點,開發人員可以達到更好的程式碼組織、可維護性和可擴展性。 IronPDF 的強大功能結合部分類別的組織優勢,為在專案中使用 PDF 的 .NET 開發人員創造了強大的工具集。 您可以使用其 免費試用 IronPDF 免費試用 IronPDF。 如果您有興趣購買,IronPDF 的授權從 $799 起。

常見問題解答

在 C# 中使用部分類別的目的是什麼?

C# 中的部分類別用於在多個檔案中分割類別、介面或結構體的定義。這對於分離自動產生的程式碼(例如 UI 控制)與自訂業務邏輯尤其有用,從而強化程式碼的管理與組織。

部分類別在 Web 應用程式中如何發揮效益?

在 Web 應用程式中,部分類別可讓開發人員分開 UI 設計程式碼和客製化業務邏輯。這種分離有助於維持簡潔的程式碼架構,讓應用程式在成長過程中更容易管理和擴充。

C# 中 partial 關鍵字的意義是什麼?

C# 中的 partial 關鍵字表示類別、介面或結構體的定義被分割成橫跨不同檔案的多個部分。此功能對於管理大型程式碼庫非常重要,尤其是在處理自動產生的程式碼時。

您可以在 C# 中將 PDF 生成與部分類別整合在一起嗎?

是的,您可以在 C# 中將 PDF 生成與部分類別整合在一起。使用 IronPDF 之類的函式庫,您可以將 PDF 生成邏輯分離到局部類別中,使其與其他業務邏輯保持區別,並提高程式碼的清晰度。

部分方法如何在部分類別中運作?

部分類別中的部分方法是在類別的一部分宣告而不實作,並可選擇在另一部分實作。如果部分方法已宣告但未實作,則會在編譯時移除,避免任何效能開銷。

什麼是巢狀局部類型及其用例?

巢狀局部類型允許在單獨的檔案中定義巢狀類的部分。這種組織工具有助於管理複雜的結構,例如具有多個巢狀類型的使用者介面控制,使程式碼管理更加完善。

如何安裝 PDF 功能的 .NET 函式庫?

可以使用 NuGet Package Manager 安裝 PDF 功能的 .NET 函式庫,例如 IronPDF。您可以使用特定於套件的指令,例如Install-Package IronPdf

使用部分類別進行協同開發的優點為何?

部分類別可讓多位開發人員在同一類別的不同部分工作,而不會發生程式碼衝突,從而促進協同開發。這是透過將類分割成不同的檔案來達成的,使得同時進行的修改更容易管理。

如何在 C# 專案中組織 PDF 生成邏輯?

PDF 生成邏輯可以在 C# 專案中組織,方法是使用部分類別將此功能與其他商業邏輯分離。這種方法可提高程式碼的可管理性和清晰度,尤其是在利用 IronPDF 之類的函式庫來建立和處理 PDF 時。

為什麼部分類別對自動產生的程式碼有用?

部分類別對於自動產生的程式碼特別有用,因為它們允許開發人員在不改變自動產生部分的情況下加入自訂邏輯。這種分隔可確保生成程式碼的任何更新不會擾亂自訂的實作。

Jacob Mellor,技術長 @ Team Iron
首席技術長

Jacob Mellor 是 Iron Software 的首席技術長,也是開創 C# PDF 技術的有遠見的工程師。作為 Iron Software 核心程式碼庫背後的原始開發人員,他從公司成立之初就塑造了公司的產品架構,與首席執行官 Cameron Rimington 一起將公司轉型為一家 50 多人的公司,為 NASA、Tesla 和全球政府機構提供服務。

Jacob 持有曼徹斯特大學土木工程一級榮譽工程學士學位 (BEng)(1998-2001 年)。

Jacob 於 1999 年在倫敦開設了他的第一家軟體公司,並於 2005 年創建了他的第一個 .NET 元件,之後,他專門解決微軟生態系統中的複雜問題。

他的旗艦產品 IronPDF & Iron Suite for .NET 函式庫在全球的 NuGet 安裝量已超過 3000 萬次,他的基礎程式碼持續為全球使用的開發人員工具提供動力。Jacob 擁有 25 年的商業經驗和 41 年的編碼專業知識,他一直專注於推動企業級 C#、Java 和 Python PDF 技術的創新,同時指導下一代的技術領導者。