在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
C# 提供了一個獨特的功能,可以加強大專案中程式碼的組織和管理:partial 關鍵字類別。 此功能可透過partial修飾符訪問,允許開發人員將類、介面或結構的定義分割在多個文件中。 此功能對於處理已生成的源代碼特別有利,例如用戶界面控制定義或服務包裝代碼,以及自定義業務邏輯。 在本文中,我們將學習部分類別和IronPDF PDF 資料庫 for .NET使用 Visual Studio。
使用 partial 修飾符定義的部分類別在 C# 中保持相同的可見性級別,這表示該類別的定義分佈在同一個程序集內的兩個或多個文件中。 此方法保持相關代碼在一起,同時保持關注點分離。 例如,部分類別 Employee 可能在一個檔案中具有其業務邏輯,而在另一個檔案中具有其資料存取層,但兩部分都編譯成單一類別。 這種分離不僅使程式碼更易於管理,還允許多名開發人員在同一個類別上工作而不發生衝突。
// File 1: Employee_BusinessLogic.cs
public partial class Employee
{
public void CalculatePay() { /* Implementation */ }
}
// File 2: Employee_DataAccess.cs
public partial class Employee
{
public void Load() { /* Implementation */ }
}
// File 1: Employee_BusinessLogic.cs
public partial class Employee
{
public void CalculatePay() { /* Implementation */ }
}
// File 2: Employee_DataAccess.cs
public partial class Employee
{
public void Load() { /* Implementation */ }
}
' File 1: Employee_BusinessLogic.cs
Partial Public Class Employee
Public Sub CalculatePay()
End Sub
End Class
' File 2: Employee_DataAccess.cs
Partial Public Class Employee
Public Sub Load()
End Sub
End Class
部分類別也可以定義部分方法,這些方法是可選的,甚至可以聲明為抽象的,從而允許更靈活的實施策略。 這些方法啟用了有趣的場景,其中類的一部分可以聲明一個方法而不加以實現,允許類的另一部分實現該方法。 如果未提供實作,則部分方法呼叫會在編譯時被移除,從而不會對性能造成影響。
// File 1: Employee_BusinessLogic.cs
public partial class Employee
{
partial void OnPayCalculated(double amount);
public void CalculatePay()
{
double amount = 1000; // Simplified calculation
OnPayCalculated(amount);
}
}
// File 2: Employee_Events.cs
public partial class Employee
{
partial void OnPayCalculated(double amount)
{
Console.WriteLine($"Pay calculated: {amount}");
}
}
// File 1: Employee_BusinessLogic.cs
public partial class Employee
{
partial void OnPayCalculated(double amount);
public void CalculatePay()
{
double amount = 1000; // Simplified calculation
OnPayCalculated(amount);
}
}
// File 2: Employee_Events.cs
public partial class Employee
{
partial void OnPayCalculated(double amount)
{
Console.WriteLine($"Pay calculated: {amount}");
}
}
' File 1: Employee_BusinessLogic.cs
Partial Public Class Employee
Partial Private Sub OnPayCalculated(ByVal amount As Double)
End Sub
Public Sub CalculatePay()
Dim amount As Double = 1000 ' Simplified calculation
OnPayCalculated(amount)
End Sub
End Class
' File 2: Employee_Events.cs
Partial Public Class Employee
Private Sub OnPayCalculated(ByVal amount As Double)
Console.WriteLine($"Pay calculated: {amount}")
End Sub
End Class
部分方法,體現了部分定義方法,是部分類中特殊的功能,允許在部分類的一部分中宣告並可選擇性地在另一部分中實現。 此功能特別有助於在生成的代碼中提供可由開發人員選擇實現的掛鉤。 這裡的 partial 關鍵字至關重要,因為它表示方法可能有,也可能沒有實現。
考慮一個範例,其中一個UI元件需要在使用者介面控制載入之前執行某些動作。 部分方法提供了一種整潔的方法來插入自訂業務邏輯而不會使自動生成的代碼變得混亂。
// File: UIControls_AutoGenerated.cs
public partial class UIControls
{
partial void OnControlLoading();
public void LoadControl()
{
OnControlLoading();
// Auto-generated loading logic here
}
}
// File: UIControls_CustomLogic.cs
public partial class UIControls
{
partial void OnControlLoading()
{
// Custom business logic code here
Console.WriteLine("Custom control loading logic executed.");
}
}
// File: UIControls_AutoGenerated.cs
public partial class UIControls
{
partial void OnControlLoading();
public void LoadControl()
{
OnControlLoading();
// Auto-generated loading logic here
}
}
// File: UIControls_CustomLogic.cs
public partial class UIControls
{
partial void OnControlLoading()
{
// Custom business logic code here
Console.WriteLine("Custom control loading logic executed.");
}
}
' File: UIControls_AutoGenerated.cs
Partial Public Class UIControls
Partial Private Sub OnControlLoading()
End Sub
Public Sub LoadControl()
OnControlLoading()
' Auto-generated loading logic here
End Sub
End Class
' File: UIControls_CustomLogic.cs
Partial Public Class UIControls
Private Sub OnControlLoading()
' Custom business logic code here
Console.WriteLine("Custom control loading logic executed.")
End Sub
End Class
業務邏輯通常需要在自動生成的基礎上進行修改和擴展,特別是在具有複雜規則或行為的應用程式中。 部分類別提供了一種無縫的方法,可以在不改變自動生成的 UI 或資料存取代碼的情況下,將業務邏輯包含在單獨的源檔案中。 這種分離確保業務邏輯易於由開發人員訪問和修改,增強了協作,尤其是在有多名開發人員參與該專案時。
// File: Employee_AutoGenerated.cs
public partial class Employee
{
// Auto-generated properties and methods
}
// File: Employee_BusinessLogic.cs
public partial class 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
{
public void Promote()
{
// Business logic code to promote an employee
Console.WriteLine("Employee promoted.");
}
}
' File: Employee_AutoGenerated.cs
Partial Public Class Employee
' Auto-generated properties and methods
End Class
' File: Employee_BusinessLogic.cs
Partial Public Class Employee
Public Sub Promote()
' Business logic code to promote an employee
Console.WriteLine("Employee promoted.")
End Sub
End Class
巢狀的部分類型擴展了部分類別的概念至巢狀類別,允許一個巢狀類別的部分可以在不同的文件中定義。 這在組織大型巢狀結構時特別有用,例如一個複雜的用戶介面控制定義,其中包括多個巢狀類型以處理控制行為的各個方面。
// File: ComplexControl_Part1.cs
public partial class ComplexControl
{
public partial class NestedControl
{
public void Initialize() { /* Initialization code here */ }
}
}
// File: ComplexControl_Part2.cs
public partial class ComplexControl
{
public partial class NestedControl
{
public void Cleanup() { /* Cleanup code here */ }
}
}
// File: ComplexControl_Part1.cs
public partial class ComplexControl
{
public partial class NestedControl
{
public void Initialize() { /* Initialization code here */ }
}
}
// File: ComplexControl_Part2.cs
public partial class ComplexControl
{
public partial class NestedControl
{
public void Cleanup() { /* Cleanup code here */ }
}
}
' File: ComplexControl_Part1.cs
Partial Public Class ComplexControl
Partial Public Class NestedControl
Public Sub Initialize()
End Sub
End Class
End Class
' File: ComplexControl_Part2.cs
Partial Public Class ComplexControl
Partial Public Class NestedControl
Public Sub Cleanup()
End Sub
End Class
End Class
部分类在涉及自动生成源代码的场景中尤其有利,比如在 Visual Studio 创建 Windows Forms 的情况下。 此設置允許開發人員將 UI 設計代碼分離到一個獨立的源文件中,使他們能夠擴展或修改類而不影響原始的 UI 設計。
在網路應用程式中,部分類別促進將產生的網路服務包裝器代碼與自訂業務邏輯分離,確保對網路服務的更新不會覆蓋自訂的修改。 同樣地,在使用 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
}
' Auto-generated UI class
Partial Public Class MainForm
Inherits Form
' Designer code
End Class
' Custom logic for MainForm
Partial Public Class MainForm
Inherits Form
' Custom event handlers and methods
End Class
IronPDF 是一個完整的 .NET 庫,允許開發人員在其應用程式中創建、閱讀和編輯 PDF 文件。 它提供了一種直接的方法來使用 IronPDF 從 HTML 生成 PDF 文件、URLs、圖像、ASPX 和文本,使其成為報告、文件生成和網頁內容存檔的多功能工具。 IronPDF 以其易於使用而聞名,僅需最少的設置即可集成到任何 .NET 專案中,包括使用 C# 開發的應用程式。
為了說明 IronPDF 與部分類的整合,讓我們考慮一個範例:在此範例中,我們有一個網頁應用程式,可以以 PDF 格式生成報告。 我們將功能分割到部分類別檔案中,以將業務邏輯與 PDF 生成邏輯分開。
首先,確保將 IronPDF 添加到您的專案中。 這通常可以通過 NuGet 套件管理員使用以下命令完成:
Install-Package IronPdf
我們將把課程分成兩個部分:一個部分處理與報告數據相關的業務邏輯,另一部分使用IronPDF進行PDF生成。
文件 1: ReportGenerator_BusinessLogic.cs
此檔案包含用於為報告準備資料的商業邏輯。
public partial class ReportGenerator
{
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
{
public IEnumerable<string> GetDataForReport()
{
// Imagine this method fetches and prepares data for the report
return new List<string> { "Data1", "Data2", "Data3" };
}
}
Partial Public Class ReportGenerator
Public Function GetDataForReport() As IEnumerable(Of String)
' Imagine this method fetches and prepares data for the report
Return New List(Of String) From {"Data1", "Data2", "Data3"}
End Function
End Class
文件 2: ReportGenerator_PdfGeneration.cs
此檔案使用 IronPDF 從準備好的數據生成 PDF 報告。
public partial class ReportGenerator
{
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
{
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.");
}
}
Partial Public Class ReportGenerator
Public Sub GeneratePdfReport()
Dim renderer = New IronPdf.ChromePdfRenderer()
Dim data = GetDataForReport()
Dim htmlContent = $"<html><body><h1>Report</h1><p>{String.Join("</p><p>", data)}</p></body></html>"
' Generate PDF from HTML string
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
' Save the PDF to a file
pdf.SaveAs("Report.pdf")
Console.WriteLine("Report generated successfully.")
End Sub
End Class
借助部分類別設置,生成 PDF 報告只需在 ReportGenerator 類的實例上調用 GeneratePdfReport 方法。
var reportGenerator = new ReportGenerator();
reportGenerator.GeneratePdfReport();
var reportGenerator = new ReportGenerator();
reportGenerator.GeneratePdfReport();
Dim reportGenerator As New ReportGenerator()
reportGenerator.GeneratePdfReport()
在 C# 中,使用部分類別、部分方法和嵌套的部分類型為開發人員提供了一種靈活而強大的代碼組織和管理工具。 通過將自動生成的代碼與業務邏輯、用戶界面控制定義和應用程序的其他部分分開,開發人員可以創建更易於維護、可讀性更高且可擴展的應用程序。
通過分離商業邏輯和 PDF 處理的關注點,開發人員可以實現更好的代碼組織、可維護性和可擴展性。 IronPDF 結合部分類別的組織優勢和強大的功能,為 .NET 開發人員在其專案中使用 PDF 提供了一個強大的工具集。 您可以免費試用IronPDFIronPDF 免費試用. 如果您有興趣購買,IronPDF 的授權價格從 $749 起。