.NET 幫助

C# 呼叫基底建構函式(開發者如何運作)

發佈 2024年6月6日
分享:

當處理繼承時,基本類別和衍生類別之間的關係引入了複雜性在如何構造函數被稱為。 了解如何從衍生類別中呼叫基類別的建構函式,有助於正確管理物件的狀態和行為。

本指南將全面探討該概念,著重於繼承層次結構中建構函式調用的不同情境和細微差別。 它還會探索IronPDF 庫及其與該主題相關的代碼示例。

基本概念:類別建構子和繼承

在 C# 中,構造函式是類別中用來初始化其物件的一種特殊方法。 當一個類別繼承自另一個類別(稱為基類)時,衍生類別也可以繼承或覆寫基類的建構子。 從衍生類別呼叫基類別建構函式的方法,確保基類別在衍生類別加入其初始化之前正確初始化。

在建構子呼叫中的 'base' 關鍵字

在 C# 中,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
VB   C#

派生類需要調用此構造函數來正確初始化其物件的基類部分:

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
VB   C#

在此範例中: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
VB   C#

在這個配置中,DerivedClass 通過對應基類的構造函數提供靈活性,確保根據對象創建時的需求能夠訪問 BaseClass 提供的所有初始化形式。

IronPDF 介紹

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

範例程式碼

若要演示使用 IronPDF 在 C# 中從 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
VB   C#

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

輸出

C# 調用基底建構函式(對開發者的工作原理):圖 1 - 來自之前程式碼範例的輸出 PDF

結論

掌握在 C# 中如何在繼承層次結構中處理建構函數,能使開發人員撰寫出更可靠和更易於維護的程式碼。 透過理解 base 關鍵字的作用以及如何有效管理多個建構子和像私有建構子以及靜態方法這類特殊情況,你可以確保在複雜的物件階層中正確初始化類別。

對於使用 C# 進行物件導向程式設計的新手和有經驗的開發人員來說,這種全面的理解是至關重要的。 IronPDF 試用許可證供開發人員在購買之前測試其功能。 在試用期結束後,如果您決定 IronPDF 符合您的需求,則授權選項從$749開始。

< 上一頁
將字串解析為整數 C#(開發人員如何操作)
下一個 >
GraphQL C#(對開發人員的工作原理)

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,810,873 查看許可證 >