跳過到頁腳內容
.NET幫助

C# 主建構函數(開發者的工作原理)

在C#程式設計的物件導向環境中,主要構造函數的引入為該語言帶來了新的優雅和簡單層次。 主要構造函數與攔截器和集合表達式等功能一起,作為一個強大的功能在C# 12中出現,為宣告具參數的構造函數提供了更簡潔的語法。 您可以在Microsoft C# 指南上深入探索主要構造函數。

在這篇文章中,我們將學習如何有效地使用C# 12 主要構造函數,還將探討它們的功能、用途以及它們如何改變開發人員接近類別初始化的方式。

Understanding the Basics: Constructors in C#

構造函數在物件導向程式設計中起著關鍵作用,作為初始化物件的藍圖。 傳統上,C#開發人員使用默認構造函數或有參數構造函數來設置其類的初始狀態。 然而,主要構造函數的引入為C#開發的重要方面增加了更精簡的方法。

主要構造函數的精髓

C#中的主要構造函數是一種簡潔的方式來直接在類的宣告中宣告和初始化屬性。 它簡化了定義和分配屬性的過程,提供了一種更具聲明性和可讀性的語法。

主要構造函數的好處

  1. 簡潔性: 主要構造函數提供簡潔的語法,減少樣板程式碼並增強可讀性。
  2. 作用域: 與傳統構造函數不同,主要構造函數中的參數在整個類或結構中都是可用的,提供了靈活性。
  3. 默認值: 默認參數值簡化了物件創建,使開發人員更加便利。

聲明一個主要構造函數

主要構造函數的語法涉及在類標頭中直接聲明屬性。 讓我們考慮一個基本的Person類別範例。

public class Person(string name, int age)
{
    public string Name { get; } = name;
    public int Age { get; } = age;
    public override string ToString() => $"Name: {Name}, Age: {Age}";
}
public class Person(string name, int age)
{
    public string Name { get; } = name;
    public int Age { get; } = age;
    public override string ToString() => $"Name: {Name}, Age: {Age}";
}
$vbLabelText   $csharpLabel

在上述代碼片段中,Person類具有一個主要構造函數,它初始化了實例成員Name和實例成員Age屬性。 構造函數參數與類或結構名一起聲明,並且在定義公共屬性時,參數值被分配給它們。

範例 1:2D空間中的不可變點

public readonly struct Point(double x, double y)
{
    public double X { get; } = x;
    public double Y { get; } = y;
    public double Magnitude => Math.Sqrt(X * X + Y * Y);
}
public readonly struct Point(double x, double y)
{
    public double X { get; } = x;
    public double Y { get; } = y;
    public double Magnitude => Math.Sqrt(X * X + Y * Y);
}
$vbLabelText   $csharpLabel

在此範例中,Point結構的主要構造函數初始化了XY屬性,展示瞭如何簡潔且表達式的語法。

範例 2:具有默認設置的可配置記錄器

public class Logger(string filePath = "log.txt", LogLevel level = LogLevel.Info)
{
    private readonly string _filePath = filePath;
    private readonly LogLevel _level = level;

    public void Log(string message)
    {
        // Actual logging implementation using _filePath and _level
    }
}
public class Logger(string filePath = "log.txt", LogLevel level = LogLevel.Info)
{
    private readonly string _filePath = filePath;
    private readonly LogLevel _level = level;

    public void Log(string message)
    {
        // Actual logging implementation using _filePath and _level
    }
}
$vbLabelText   $csharpLabel

此處,Logger類的主要構造函數提供了filePathlevel的默認值,使其在保持可配置性的同時既靈活又易於使用。

範例 3:依賴注入

public interface IService
{
    Distance GetDistance();
}

public class ExampleController(IService service) : ControllerBase
{
    public ActionResult<Distance> Get() => service.GetDistance();
}
public interface IService
{
    Distance GetDistance();
}

public class ExampleController(IService service) : ControllerBase
{
    public ActionResult<Distance> Get() => service.GetDistance();
}
$vbLabelText   $csharpLabel

主要構造函數適合依賴注入的場景。 在此範例中,控制器類表明其依賴關係,增強了可維護性並促進單元測試。

範例 4:構建幾何形狀層次結構

public abstract class Shape(double width, double height)
{
    public double Width { get; } = width;
    public double Height { get; } = height;
    public abstract double CalculateArea();
}

public class Rectangle(double width, double height) : Shape(width, height)
{
    public override double CalculateArea() => Width * Height;
}

public class Circle : Shape
{
    public Circle(double radius) : base(radius * 2, radius * 2) { }
    public override double CalculateArea() => Math.PI * Math.Pow(Width / 2, 2);
}
public abstract class Shape(double width, double height)
{
    public double Width { get; } = width;
    public double Height { get; } = height;
    public abstract double CalculateArea();
}

public class Rectangle(double width, double height) : Shape(width, height)
{
    public override double CalculateArea() => Width * Height;
}

public class Circle : Shape
{
    public Circle(double radius) : base(radius * 2, radius * 2) { }
    public override double CalculateArea() => Math.PI * Math.Pow(Width / 2, 2);
}
$vbLabelText   $csharpLabel

在此範例中,Shape類的主要構造函數為幾何形狀層次結構奠定了基礎。 像RectangleCircle之類的子類利用主要構造函數進行一致的初始化。 Rectangle類本身聲明了主要構造函數,並將捕獲的主要構造函數參數傳遞給Shape類的主要參數。 Circle類展示了通過在整個類中定義其構造函數然後使用base關鍵字將其參數作為默認值傳遞給Shape構造函數來展示靈活性。

介紹IronPDF

IronPDF是一個多功能的C#程式庫,可以輕鬆授權開發人員來創建、操作和轉換PDF檔。 無論您是生成發票、報告還是其他任何文件,IronPDF允許您無縫地在您的C#應用程式中將HTML內容轉換為優雅和專業的PDF。

IronPDF是開發人員的好工具,允許他們將網頁、URL和HTML轉換為PDF。 最好的部分是,PDF看起來就像原始的網頁,所有格式和樣式都得以保留。 這非常適合從網頁內容如報告和發票中創建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");
    }
}
$vbLabelText   $csharpLabel

C#主要構造函數(它如何對開發人員起作用):圖1 - IronPDF 網頁

安裝IronPDF:快速開始

要將IronPDF整合到您的C#專案中,首先安裝IronPDF NuGet套件。 在您的包管理器控制台中執行以下指令碼:

Install-Package IronPdf

或者,在NuGet套件管理器中找到"IronPDF"並從那裡進行安裝。

C#主要構造函數(它如何對開發人員起作用):圖2 - 在NuGet套件管理器瀏覽器中搜尋IronPDF套件

使用IronPDF生成PDF

使用IronPDF創建PDF是一個精簡的過程。 請考慮以下範例:

var htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>";
// Create a new PDF document
var pdfDocument = new IronPdf.ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf");
var htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>";
// Create a new PDF document
var pdfDocument = new IronPdf.ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf");
$vbLabelText   $csharpLabel

在此範例中,IronPDF被用來將HTML內容渲染為PDF文件,隨後保存至指定位置。 有關在C#中創建和操作PDF的更多詳情,請訪問這個完整的教程鏈接,如欲進一步探究,請訪問此文檔頁面。

C#主要構造函數:類初始化革命

C#主要構造函數提供了一種聲明性和精簡的方法來在類宣告中直接初始化類屬性。 讓我們探討這個優雅的功能能否無縫整合到IronPDF中。

C#主要構造函數與IronPDF的整合

雖然C#主要構造函數主要是一種語言特性,專注於類初始化,但它們與IronPDF的直接整合可能不是常見的用例。 IronPDF的核心功能在於生成和操作PDF文件,而類初始化的細節可能不直接與此工作流程對齊。

然而,開發人員可以利用C#主要構造函數定義與IronPDF配置或資料模型相關的自定義類別或結構。 例如,如果您的應用程式需要一個特定的類結構來管理PDF相關的设置或配置,C#主要構造函數可以成為初始化這些類別的一個有價值的工具。

public class PdfGenerationSettings(string title, bool includeHeader, bool includeFooter)
{
    public string Title { get; } = title;
    public bool IncludeHeader { get; } = includeHeader;
    public bool IncludeFooter { get; } = includeFooter;
    // Additional properties...
}

// Usage with IronPDF
var pdfSettings = new PdfGenerationSettings("My PDF Title", true, false);
var renderOptions = new ChromePdfRenderOptions
{
    PaperSize = IronPdf.Rendering.PdfPaperSize.A4,
    MarginTop = 20,
    MarginBottom = 20,
    MarginLeft = 10,
    MarginRight = 10,
    Title = pdfSettings.Title
};
// Apply settings from PdfGenerationSettings
if (pdfSettings.IncludeHeader)
{
    renderOptions.TextHeader = new TextHeaderFooter
    {
        CenterText = "Page {page} of {total-pages}",
        DrawDividerLine = true
    };
}
var pdfDocument = new IronPdf.ChromePdfRenderer();
pdfDocument.RenderingOptions = renderOptions;
pdfDocument.RenderHtmlAsPdf("<html><body><h1>Hello, IronPDF!</h1></body></html>").SaveAs("CustomizedDocument.pdf");
public class PdfGenerationSettings(string title, bool includeHeader, bool includeFooter)
{
    public string Title { get; } = title;
    public bool IncludeHeader { get; } = includeHeader;
    public bool IncludeFooter { get; } = includeFooter;
    // Additional properties...
}

// Usage with IronPDF
var pdfSettings = new PdfGenerationSettings("My PDF Title", true, false);
var renderOptions = new ChromePdfRenderOptions
{
    PaperSize = IronPdf.Rendering.PdfPaperSize.A4,
    MarginTop = 20,
    MarginBottom = 20,
    MarginLeft = 10,
    MarginRight = 10,
    Title = pdfSettings.Title
};
// Apply settings from PdfGenerationSettings
if (pdfSettings.IncludeHeader)
{
    renderOptions.TextHeader = new TextHeaderFooter
    {
        CenterText = "Page {page} of {total-pages}",
        DrawDividerLine = true
    };
}
var pdfDocument = new IronPdf.ChromePdfRenderer();
pdfDocument.RenderingOptions = renderOptions;
pdfDocument.RenderHtmlAsPdf("<html><body><h1>Hello, IronPDF!</h1></body></html>").SaveAs("CustomizedDocument.pdf");
$vbLabelText   $csharpLabel

在此範例中,PdfGenerationSettings類利用C#主要構造函數來初始化與PDF生成設置相關的屬性,稍後可以用來確定要新增和要跳過的渲染選項。輸出包含一個標題文本和標題,因為它是使用主要構造函數參數設定的。

C#主要構造函數(它如何對開發人員起作用):圖3 - 以上代碼範例的輸出 PDF

結論

總而言之,C#中的主要構造函數提供了精緻且表達的類初始化方法。 它們的聲明性語法增強了代碼的可讀性,促進了不可變性,並簡化了創建具有默認值的物件的過程。 無論您是在定義屬性、強制不可變性,還是接受默認值,主要構造函數都能授權開發人員在充滿活力的C#程式設計世界中掌握類初始化的藝術。

雖然C#主要構造函數與IronPDF的直接整合可能不是重點,但這兩個元素可以和諧地一起工作。 C#主要構造函數增強了類初始化的清晰性和簡單性,使其對於定義與IronPDF工作流程相關的結構或配置非常有用。

利用IronPDF的強大功能來實現強大的PDF生成,並在類初始化優雅至關重要的地方使用C#主要構造函數。 這對動態組合使您能夠在C#程式設計世界中以創造性和高效率的方式導航文件生成的複雜性。

IronPDF提供免費試用,其基本授權從$799開始。

常見問題解答

主要構造函數如何使 C# 代碼更簡潔?

主要構造函數允許您直接在類聲明中聲明和初始化屬性,從而減少樣板代碼並提高可讀性。

C# 12 引入了哪些新功能?

C# 12 引入了主要構造函數、攔截器和集合表達式,這些功能共同為開發人員提供了更簡潔和強大的語法選項。

主要構造函數可以與不可變數據結構一起使用嗎?

是的,主要構造函數非常適合不可變數據結構,因為它們允許直接在構造函數中初始化只讀屬性。

如何使用 C# 將 HTML 內容轉換為 PDF?

您可以使用 IronPDF 的 ChromePdfRenderer 類將 HTML 內容轉換為 PDF,確保輸出文檔中的格式和樣式得以保留。

使用 IronPDF 進行 PDF 生成有什麼優勢?

IronPDF 提供了一個強大的平台來在 C# 中創建和操作 PDF 文件,支援 HTML 到 PDF 的轉換、PDF 合併和詳細的樣式保留等功能。

主要構造函數如何增強依賴注入?

主要構造函數通過在構造函數參數中明確指出類的依賴性來增強依賴注入,從而簡化依賴關係圖的設置和維護。

主要構造函數如何與 PDF 文檔生成進行整合?

使用像 IronPDF 這樣的庫時,主要構造函數可以用於初始化與 PDF 設置相關的配置類或結構,從而簡化設置過程。

主要構造函數的一些實際應用例子有哪些?

實際應用例子包括幾何形狀層次結構的初始化,以及需要清晰和簡潔的依賴注入場景。

開發人員如何開始在他們的項目中使用 IronPDF?

開發人員可以通過程序包管理控制台或 NuGet 包管理器安裝 IronPDF NuGet 包,並參考詳細的文檔以獲取實施細節。

IronPDF 在文檔生成工作流中扮演什麼角色?

IronPDF 通過允許開發人員輕鬆創建、轉換和操作 C# 中的 PDF,來增強文檔生成工作流,並支持與其他 C# 功能的無縫集成。

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