.NET 幫助

C# 常數(它如何為開發者運作)

在 C# 中,const 關鍵字 是定義編譯時已知的常數字段或值的強大工具。這些值是不可變的,意味著一旦它們被設置,就無法在程式中更改其值。 使用const可以通過明確指示應保持不變的值,使您的代碼更具可讀性和可維護性。 在本文中,我們將討論 const 關鍵字和IronPDF 庫

宣告常數變量

要宣告一個常數變數,您可以使用const關鍵字後接資料型別,然後立即初始化它。 例如,const int myConstValue = 100; 定義了一個整數常數。 需要注意的是,常量變數在宣告時必須初始化,因為它的值應在編譯時確定,並在程式執行前完全評估。

public class Program
{
    public const int MaxSize = 10;
    static void Main(string [] args)
    {
        Console.WriteLine(MaxSize);
    }
}
public class Program
{
    public const int MaxSize = 10;
    static void Main(string [] args)
    {
        Console.WriteLine(MaxSize);
    }
}
Public Class Program
	Public Const MaxSize As Integer = 10
	Shared Sub Main(ByVal args() As String)
		Console.WriteLine(MaxSize)
	End Sub
End Class
$vbLabelText   $csharpLabel

C# 常數(開發者指南):圖 1 - 常數輸出

這個例子說明了如何在類別中簡單使用常數整數(const int)。 MaxSize 常數可在同一個類別中訪問,並可以直接在 static void Main 方法中使用。

const vs. readonly 變數

雖然constreadonly關鍵字都用於聲明不可變值,但它們之間有重要的區別。 const 欄位是編譯時常數,這意味著它的值是在編譯時確定的,並直接嵌入到中間語言 (IL) 代碼中。 這使它變為靜態,無法修改。

另一方面,readonly變數可以在宣告時或在類別的建構子中賦值。 這樣的設計帶來了一些靈活性,因為 readonly 字段可以根據實例化類時所使用的構造函數而具有不同的值。

public class Program
{
    public const string ConstExample = "Constant"; // const string
    public readonly string ReadonlyExample;
    public Program()
    {
        ReadonlyExample = "Initialized at runtime";
    }
    static void Main(string [] args)
    {
        Program p = new Program();
        Console.WriteLine(ConstExample);
        Console.WriteLine(p.ReadonlyExample);
    }
}
public class Program
{
    public const string ConstExample = "Constant"; // const string
    public readonly string ReadonlyExample;
    public Program()
    {
        ReadonlyExample = "Initialized at runtime";
    }
    static void Main(string [] args)
    {
        Program p = new Program();
        Console.WriteLine(ConstExample);
        Console.WriteLine(p.ReadonlyExample);
    }
}
Public Class Program
	Public Const ConstExample As String = "Constant" ' const string
	Public ReadOnly ReadonlyExample As String
	Public Sub New()
		ReadonlyExample = "Initialized at runtime"
	End Sub
	Shared Sub Main(ByVal args() As String)
		Dim p As New Program()
		Console.WriteLine(ConstExample)
		Console.WriteLine(p.ReadonlyExample)
	End Sub
End Class
$vbLabelText   $csharpLabel

C# Const(對開發者來說的運作方式):圖2 - 唯讀欄位輸出

const 變量的範圍

常量變數可以在方法內部聲明,或者作為類的成員聲明。 當您在方法中宣告const變數時,它被稱為區域常數。 局部常數僅能在其所宣告的方法中存取。

public class Program
{
    static void DemoMethod()
    {
        const int LocalConst = 5; // local constant
        Console.WriteLine(LocalConst);
    }
}
public class Program
{
    static void DemoMethod()
    {
        const int LocalConst = 5; // local constant
        Console.WriteLine(LocalConst);
    }
}
Public Class Program
	Private Shared Sub DemoMethod()
		Const LocalConst As Integer = 5 ' local constant
		Console.WriteLine(LocalConst)
	End Sub
End Class
$vbLabelText   $csharpLabel

C# Const(它如何為開發人員工作):圖 3 - 本地常數輸出

相比之下,當const在類別中聲明但位於任何方法之外時,它可以從同一個類別的任何靜態函式訪問,因為const字段隱含為靜態。 然而,嘗試從實例方法訪問const字段而不通過類名引用它將導致編譯錯誤。

編譯時常數與運行時常數

const 值的主要特徵是在編譯時進行評估。這意味著const 欄位的值必須由編譯器已知並完全評估。 這與在執行時進行評估的變量形成對比,這些變量的值是在程式執行期間確定的。

例如,試圖將一個const欄位的值指定為在運行時進行計算的結果,將導致編譯時錯誤。 編譯器要求const值必須從編譯時已知的常量表達式或文字值進行分配。

const double Pi = Math.PI; // This will cause a compile time error
const double Pi = Math.PI; // This will cause a compile time error
Const Pi As Double = Math.PI ' This will cause a compile time error
$vbLabelText   $csharpLabel

C# 中常數和靜態成員的高級使用

除了 C# 中的constreadonly的基礎知識外,了解如何處理常數表達式、靜態構造函數和靜態字段,特別是在處理需要在類的實例之間共享的常量值時,可以提升您的編碼實踐。

常數運算式

在 C# 中,常數表達式是一種可以在編譯時完全評估的表達式。因此,當您宣告一個 const 變數時,其宣告的右側必須是一個常數表達式。 這確保const值是固定的,可以直接嵌入到已編譯的代碼中,從而實現高度優化和高效的應用程序。

public class Calculator
{
    public const int Multiplier = 2;
    public const int DoubleMultiplier = Multiplier * 2; // Constant expression
}
public class Calculator
{
    public const int Multiplier = 2;
    public const int DoubleMultiplier = Multiplier * 2; // Constant expression
}
Public Class Calculator
	Public Const Multiplier As Integer = 2
	Public Const DoubleMultiplier As Integer = Multiplier * 2 ' Constant expression
End Class
$vbLabelText   $csharpLabel

在此範例中,DoubleMultiplier 是一個常數表達式,因為它是使用另一個常數值計算的,這使其符合成為編譯時常數的資格。

靜態構造函數

在 C# 中,靜態建構函式是一種特殊建構函式,用於初始化類別的靜態字段。 在創建第一個實例或引用任何靜態成員之前,會自動調用它。 靜態建構函數對於複雜的靜態資料初始化或執行每種類型只需要發生一次的操作很有用,而不是每個實例都需要發生。

public class Program
{
    public static readonly string StartTime;
    static Program()
    {
        StartTime = DateTime.Now.ToString("T");
    }
    public static void DisplayStartTime()
    {
        Console.WriteLine($"Program started at: {StartTime}");
    }
}
public class Program
{
    public static readonly string StartTime;
    static Program()
    {
        StartTime = DateTime.Now.ToString("T");
    }
    public static void DisplayStartTime()
    {
        Console.WriteLine($"Program started at: {StartTime}");
    }
}
Public Class Program
	Public Shared ReadOnly StartTime As String
	Shared Sub New()
		StartTime = DateTime.Now.ToString("T")
	End Sub
	Public Shared Sub DisplayStartTime()
		Console.WriteLine($"Program started at: {StartTime}")
	End Sub
End Class
$vbLabelText   $csharpLabel

靜態建構函式會以當前時間初始化StartTime欄位。這個值可以透過DisplayStartTime靜態方法存取,展示了靜態建構函式如何用在執行期未知的值來初始化唯讀欄位。

靜態欄位與 readonly 和 static 關鍵字

靜態欄位屬於類別而不是類別的任何實例,並使用static關鍵字聲明。 當與readonly關鍵字結合使用時,靜態欄位可以在宣告時或在靜態建構函式中初始化,並且之後無法修改。

public class Configuration
{
    public static readonly int MaxUsers;
    public const int TimeoutSeconds = 30;
    static Configuration()
    {
        MaxUsers = FetchMaxUsersFromConfig();
    }
    private static int FetchMaxUsersFromConfig()
    {
        // Imagine this method reads from a configuration file
        return 100;
    }
}
public class Configuration
{
    public static readonly int MaxUsers;
    public const int TimeoutSeconds = 30;
    static Configuration()
    {
        MaxUsers = FetchMaxUsersFromConfig();
    }
    private static int FetchMaxUsersFromConfig()
    {
        // Imagine this method reads from a configuration file
        return 100;
    }
}
Public Class Configuration
	Public Shared ReadOnly MaxUsers As Integer
	Public Const TimeoutSeconds As Integer = 30
	Shared Sub New()
		MaxUsers = FetchMaxUsersFromConfig()
	End Sub
	Private Shared Function FetchMaxUsersFromConfig() As Integer
		' Imagine this method reads from a configuration file
		Return 100
	End Function
End Class
$vbLabelText   $csharpLabel

此範例展示了使用靜態建構子來初始化一個 readonly 靜態欄位 MaxUsers,這個值是在執行時檢索的,可能來自配置檔案。而 const 欄位 TimeoutSeconds 表示一個在編譯時的常數,直接嵌入到代碼中。

IronPDF 介紹

C# 常數(開發人員的運作方式):圖 4 - IronPDF

IronPDF 是一個多功能的庫,使開發人員能夠在 .NET 應用程式中創建、編輯和讀取 PDF 文件。 這個強大的工具透過允許開發者將HTML轉換為PDF,輕鬆簡化了PDF生成、內容操作和數據提取。

IronPDF 的優勢在於將HTML 轉換為 PDF,同時保留佈局和樣式。 這是從網頁內容生成 PDF 的理想工具,例如報告、發票和文檔。 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

開始使用 IronPDF 和 const 範例

為了展示如何將IronPDF整合到.NET專案中,我們來看看一個簡單的例子,其中我們使用常數來定義我們希望轉換為PDF文件的HTML字串。

using IronPdf;
public class PdfGenerator
{
    // Defining a constant HTML template
    public const string HtmlTemplate = @"
        <html>
            <head>
                <title>PDF Report</title>
            </head>
            <body>
                <h1>IronPDF Report</h1>
                <p>This is a simple PDF document generated from HTML string using IronPDF.</p>
            </body>
        </html>";
    public static void CreatePdf(string filePath)
    {
        IronPdf.License.LicenseKey = "License";
        // Create a new PDF document from HTML template
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(HtmlTemplate);
        // Save the PDF document to a file
        pdf.SaveAs(filePath);
        Console.WriteLine($"PDF generated successfully at {filePath}");
    }
}
class Program
{
    static void Main(string [] args)
    {
        PdfGenerator.CreatePdf("example.pdf");
    }
}
using IronPdf;
public class PdfGenerator
{
    // Defining a constant HTML template
    public const string HtmlTemplate = @"
        <html>
            <head>
                <title>PDF Report</title>
            </head>
            <body>
                <h1>IronPDF Report</h1>
                <p>This is a simple PDF document generated from HTML string using IronPDF.</p>
            </body>
        </html>";
    public static void CreatePdf(string filePath)
    {
        IronPdf.License.LicenseKey = "License";
        // Create a new PDF document from HTML template
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(HtmlTemplate);
        // Save the PDF document to a file
        pdf.SaveAs(filePath);
        Console.WriteLine($"PDF generated successfully at {filePath}");
    }
}
class Program
{
    static void Main(string [] args)
    {
        PdfGenerator.CreatePdf("example.pdf");
    }
}
Imports IronPdf
Public Class PdfGenerator
	' Defining a constant HTML template
	Public Const HtmlTemplate As String = "
        <html>
            <head>
                <title>PDF Report</title>
            </head>
            <body>
                <h1>IronPDF Report</h1>
                <p>This is a simple PDF document generated from HTML string using IronPDF.</p>
            </body>
        </html>"
	Public Shared Sub CreatePdf(ByVal filePath As String)
		IronPdf.License.LicenseKey = "License"
		' Create a new PDF document from HTML template
		Dim renderer = New ChromePdfRenderer()
		Dim pdf = renderer.RenderHtmlAsPdf(HtmlTemplate)
		' Save the PDF document to a file
		pdf.SaveAs(filePath)
		Console.WriteLine($"PDF generated successfully at {filePath}")
	End Sub
End Class
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		PdfGenerator.CreatePdf("example.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

在此範例中,HtmlTemplate 常數被定義為簡單的 HTML 內容,作為我們 PDF 文件的來源。 CreatePdf 方法使用 IronPDF 的 ChromePdfRenderer 類將此 HTML 轉換為 PDF 並保存到指定的文件路徑。 這展示了IronPDF可以輕鬆地從靜態HTML內容生成PDF,利用const關鍵字來定義不可變的HTML模板。

輸出

這是輸出 PDF 檔案:

C# Const(它如何為開發者工作):圖五 - PDF輸出

結論

C# Const(對開發人員的作用):圖 6 - 授權

在 C# 中,const 關鍵字是一個有價值的特性,用於定義編譯時已知的不可變值。它通過清楚地指示哪些值是常數,有助於提高代碼的可讀性和可維護性。 請記住,const 變量隱式為靜態,必須在聲明時初始化,其值必須是編譯時常數。 相較之下,readonly 變數提供更多的彈性,但在執行時期初始化。

IronPDF 不僅以其在 PDF 處理中的強大功能而聞名,還因其靈活的採用模式而脫穎而出。 對於希望探索其功能的開發者和組織,IronPDF 提供免費試用,這是一個評估其特性和整合便捷性的絕佳機會,無需初始投資。

準備好將 IronPDF 用於商業用途時,授權選項從$749開始。 此定價結構旨在滿足不同項目規模和類型的需求,確保您可以選擇最適合您開發和分發計劃的許可證。

Chipego
奇佩戈·卡林达
軟體工程師
Chipego 擁有天生的傾聽技能,這幫助他理解客戶問題,並提供智能解決方案。他在獲得信息技術理學學士學位後,于 2023 年加入 Iron Software 團隊。IronPDF 和 IronOCR 是 Chipego 專注的兩個產品,但隨著他每天找到新的方法來支持客戶,他對所有產品的了解也在不斷增長。他喜歡在 Iron Software 的協作生活,公司內的團隊成員從各自不同的經歷中共同努力,創造出有效的創新解決方案。當 Chipego 離開辦公桌時,他常常享受讀好書或踢足球的樂趣。
< 上一頁
C# Thread Sleep 方法(對開發人員的運作方式)
下一個 >
RabbitMQ C#(開發人員如何使用)