跳過到頁腳內容
.NET幫助

C# Call Base Constructor(對於開發者的運行原理)

在處理繼承時,基類與派生類之間的關係會在 結構器的呼叫方式上引入複雜性。 瞭解如何從派生類呼叫基類的建構子,有助於正確管理物件的狀態和行為。

本指南將全面探討這個概念,著重於繼承階層中與構建器調用相關的不同情境和細微差異。 它還會探討 IronPDF 函式庫與其與主題相關的程式碼範例。

基本概念:類別構成程式與繼承

C# 中的構建器是類別中初始化其物件的特殊方法。 當一個類別繼承自另一個類別(稱為基類)時,衍生類別也可以繼承或覆寫基類的構建程式。 從派生類呼叫基類構建方法的機制,可確保在派生類加入初始化之前,基類已被適當初始化。

構建器呼叫中的 'base' 關鍵字

C# 中的 base 關鍵字在派生類中使用,用以指代基類。 當您需要調用基類的建構器來取代派生的建構器時,它在建構器聲明中特別有用。 使用 base 關鍵字,繼承的建構子可以指定應該執行哪一個基類建構子,以接觸適當的建構子體。 當基底類別沒有公開無參數的建構器時,或需要在基底類別中執行特定的初始化時,這項能力就非常重要。

考慮一種情況:您有一個繼承自基礎類的公共繼承類。 基類可能有一個私有的建構器或一個需要一個整數參數的公共建構器:

public class BaseClass {
    public int b;
    public BaseClass(int b) {
        this.b = b;
    }
}
public class BaseClass {
    public int b;
    public BaseClass(int b) {
        this.b = b;
    }
}
Public Class BaseClass
	Public b As Integer
	Public Sub New(ByVal b As Integer)
		Me.b = b
	End Sub
End Class
$vbLabelText   $csharpLabel

派生類需要呼叫此建構器來正確初始化其物件的基類部分:

public class DerivedClass : BaseClass {
    public DerivedClass(int b) : base(b) {
        // Additional initialization for DerivedClass
    }
}
public class DerivedClass : BaseClass {
    public DerivedClass(int b) : base(b) {
        // Additional initialization for DerivedClass
    }
}
Public Class DerivedClass
	Inherits BaseClass

	Public Sub New(ByVal b As Integer)
		MyBase.New(b)
		' Additional initialization for DerivedClass
	End Sub
End Class
$vbLabelText   $csharpLabel

在這個範例中base(b) 明確地使用參數 b 來呼叫基類的建構子。 這可確保基類中的欄位 b 在派生類的建構子進行其正文之前被初始化。

詳細使用案例與變化

處理多重構成程式

通常,基類和派生類都可能有多個構建器。 派生類可以選擇呼叫哪個基類的建構子。 當基底類別的建構器會執行不同種類的初始化時,這個選擇就非常重要。

public class BaseClass {
    public BaseClass() {
        // Default constructor
    }
    public BaseClass(int b) {
        this.b = b;
    }
}
public class DerivedClass : BaseClass {
    public DerivedClass() : base() {
        // Calls the parameterless constructor of the base class
    }
    public DerivedClass(int b) : base(b) {
        // Calls the base class constructor that takes an int
    }
}
public class BaseClass {
    public BaseClass() {
        // Default constructor
    }
    public BaseClass(int b) {
        this.b = b;
    }
}
public class DerivedClass : BaseClass {
    public DerivedClass() : base() {
        // Calls the parameterless constructor of the base class
    }
    public DerivedClass(int b) : base(b) {
        // Calls the base class constructor that takes an int
    }
}
Public Class BaseClass
	Public Sub New()
		' Default constructor
	End Sub
	Public Sub New(ByVal b As Integer)
		Me.b = b
	End Sub
End Class
Public Class DerivedClass
	Inherits BaseClass

	Public Sub New()
		MyBase.New()
		' Calls the parameterless constructor of the base class
	End Sub
	Public Sub New(ByVal b As Integer)
		MyBase.New(b)
		' Calls the base class constructor that takes an int
	End Sub
End Class
$vbLabelText   $csharpLabel

在此設定中,DerivedClass 透過對應基類的建構器來提供彈性,確保 BaseClass 所提供的所有初始化形式都能被存取,這取決於物件建立時的需求。

IronPDF 簡介

IronPDF簡介是一個 C# 函式庫,專為需要在 .NET 應用程式中建立、讀取和編輯 PDF 文件的開發人員所設計。 使用 IronPDF 的主要好處在於它能夠 直接從 HTML、CSS、圖片和 JavaScript 生成 PDF。 該函式庫支援多種 .NET Framework,並與多種專案類型相容,包括網頁表單、伺服器應用程式和主控台應用程式。

IronPdf 專精於HTML 至 PDF的轉換,準確保留原始版面與樣式。 它是從網頁內容(如報告、發票和文件)產生 PDF 的理想選擇。 IronPDF 可將 HTML 檔案、URL 和原始 HTML 字串轉換為高品質的 PDF 文件。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

程式碼範例

為了演示在 C# 中使用 IronPDF 從 HTML 創建 PDF,您可以使用一個初始化 IronPDF 的基類和一個使用此初始化創建 PDF 的派生類。 以下是一個範例,說明您可以如何使用基本建構器來架構:

using IronPdf;

// Base class for PDF generation
public class PdfGenerator
{
    protected ChromePdfRenderer Renderer;

    // Base constructor initializes the HTML to PDF renderer
    public PdfGenerator()
    {
        Renderer = new ChromePdfRenderer();
        // Additional configuration
    }
}

// Derived class uses the base class to generate a specific PDF
public class SpecificPdfGenerator : PdfGenerator
{
    public void CreateSimplePdf(string htmlContent, string filePath)
    {
        // Uses the Renderer from the base class
        var pdfDocument = Renderer.RenderHtmlAsPdf(htmlContent);
        pdfDocument.SaveAs(filePath);
    }
}

// Usage
class Program
{
    static void Main(string[] args)
    {
        License.LicenseKey = "License-Key";
        var htmlContent = "<h1>Hello, IronPDF!</h1>";
        var filePath = "example.pdf";
        var pdfCreator = new SpecificPdfGenerator();
        pdfCreator.CreateSimplePdf(htmlContent, filePath);
    }
}
using IronPdf;

// Base class for PDF generation
public class PdfGenerator
{
    protected ChromePdfRenderer Renderer;

    // Base constructor initializes the HTML to PDF renderer
    public PdfGenerator()
    {
        Renderer = new ChromePdfRenderer();
        // Additional configuration
    }
}

// Derived class uses the base class to generate a specific PDF
public class SpecificPdfGenerator : PdfGenerator
{
    public void CreateSimplePdf(string htmlContent, string filePath)
    {
        // Uses the Renderer from the base class
        var pdfDocument = Renderer.RenderHtmlAsPdf(htmlContent);
        pdfDocument.SaveAs(filePath);
    }
}

// Usage
class Program
{
    static void Main(string[] args)
    {
        License.LicenseKey = "License-Key";
        var htmlContent = "<h1>Hello, IronPDF!</h1>";
        var filePath = "example.pdf";
        var pdfCreator = new SpecificPdfGenerator();
        pdfCreator.CreateSimplePdf(htmlContent, filePath);
    }
}
Imports IronPdf

' Base class for PDF generation
Public Class PdfGenerator
	Protected Renderer As ChromePdfRenderer

	' Base constructor initializes the HTML to PDF renderer
	Public Sub New()
		Renderer = New ChromePdfRenderer()
		' Additional configuration
	End Sub
End Class

' Derived class uses the base class to generate a specific PDF
Public Class SpecificPdfGenerator
	Inherits PdfGenerator

	Public Sub CreateSimplePdf(ByVal htmlContent As String, ByVal filePath As String)
		' Uses the Renderer from the base class
		Dim pdfDocument = Renderer.RenderHtmlAsPdf(htmlContent)
		pdfDocument.SaveAs(filePath)
	End Sub
End Class

' Usage
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		License.LicenseKey = "License-Key"
		Dim htmlContent = "<h1>Hello, IronPDF!</h1>"
		Dim filePath = "example.pdf"
		Dim pdfCreator = New SpecificPdfGenerator()
		pdfCreator.CreateSimplePdf(htmlContent, filePath)
	End Sub
End Class
$vbLabelText   $csharpLabel

這種程式碼結構促進了可重複使用性和模組化,使其更容易管理大型應用程式中不同的 PDF 生成需求。

輸出

C# Call Base Constructor (How It Works For Developers):圖 1 - 上一個程式碼範例輸出的 PDF

結論

掌握 C# 繼承階層中如何處理構建器,可讓開發人員寫出更可靠、更易維護的程式碼。 透過瞭解 base 關鍵字的作用,以及如何有效管理多重建構器及特殊情境 (例如私有建構器及一個靜態方法),您可以確保類別在複雜的物件階層中被正確初始化。

對於使用 C# 進行物件導向程式設計的新手和有經驗的開發人員而言,這種全面的瞭解都是不可或缺的。 IronPDF的試用授權,供開發人員在承諾購買之前測試其功能。 試用期結束後,如果您決定 IronPDF 符合您的需求,授權選項的起始價格為 $799 。

常見問題解答

如何在 C# 中從派生類呼叫基類的構造子?

在 C# 中,您可以使用 base 關鍵字,並在其後加上適當的參數,從派生類呼叫基類的建構子。這可確保基類在派生類之前已被正確初始化。

為什麼在 C# 繼承中 base 關鍵字很重要?

base 關鍵字在 C# 繼承中非常重要,因為它允許派生類訪問和初始化基類成員和構建器,確保適當的物件層級結構和狀態管理。

專用程式庫如何增強 C# 應用程式?

IronPDF 等專門的函式庫透過提供執行特定任務(例如將 HTML 轉換為 PDF、閱讀或編輯 PDF)的工具來增強 C# 應用程式。這可增加功能,而無需從頭編寫複雜的程式碼。

IronPDF 是什麼,如何在 C# 專案中使用?

IronPDF 是一個可在 C# 專案中使用的函式庫,用來建立、讀取和編輯 PDF 文件。它支援將 HTML 內容轉換為 PDF,對於在 .NET 應用程式中產生報表和文件非常有用。

如果基類缺乏無公開參數的建構器該怎麼辦?

如果基類缺乏無公開參數的構建器,派生類必須使用 base 關鍵字,明確地呼叫與可用參數相符的基類構建器之一,以確保正確的初始化。

使用 IronPDF 生成报告有哪些优势?

IronPDF 在生成報告方面具有優勢,可輕鬆將 HTML 轉換為 PDF,保留原始版面和風格,並允許自訂 PDF 輸出,這對於專業文件來說至關重要。

為什麼在複雜的 C# 應用程式中,了解構造器的調用是必要的?

理解構建器的調用是非常重要的,因為它可以確保物件在繼承階層中被正確地初始化,這對於在複雜的 C# 應用程式中維護可靠且可維護的程式碼是非常重要的。

您可以提供一個使用 base 關鍵字與多個構成程式的範例嗎?

是的,如果基類有多個建構子,派生類可以使用 base 關鍵字指定要呼叫的建構子。這種靈活性允許根據上下文進行量身訂做的初始化。

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

Jacob Mellor 是 Iron Software 的首席技術官,作為 C# PDF 技術的先鋒工程師。作為 Iron Software 核心代碼的原作者,他自開始以來塑造了公司產品架構,與 CEO Cameron Rimington 一起將其轉變為一家擁有超過 50 名員工的公司,為 NASA、特斯拉 和 全世界政府機構服務。

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

他的旗艦產品 IronPDF & Iron Suite .NET 庫在全球 NuGet 被安裝超過 3000 萬次,其基礎代碼繼續為世界各地的開發工具提供動力。擁有 25 年的商業經驗和 41 年的編碼專業知識,Jacob 仍專注於推動企業級 C#、Java 及 Python PDF 技術的創新,同時指導新一代技術領袖。