跳至頁尾內容
.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 與 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# 常數(開發人員如何使用):圖2 - Readonly欄位輸出

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# 常數(開發人員如何使用):圖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

Advanced Use of Constants and Static Members in 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欄位。

靜態欄位和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文件中提取資料,簡化了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# 常數(開發人員如何使用):圖5 - PDF輸出

結論

C# 常數(開發人員如何使用):圖6 - 授權

在C#中,const關鍵字是一個寶貴的功能,用於定義在編譯時已知的不可變值。它通過清楚地指示哪個值是常數,幫助提高您的程式碼的可讀性和可維護性。 請記住,const變數是隱含靜態的,必須在宣告時初始化,其值亦須為編譯時常量。 相較之下,readonly變數提供更多靈活性,但在運行時初始化。

IronPDF不僅因其在PDF操作中的強大功能而脫穎而出,還因其靈活的採用模式。 對於開發人員和希望探索其功能的組織,IronPDF提供免費試用,提供了一個絕佳的機會評估其功能和整合的便利性,而無需提前投資。

當準備好將IronPDF用於商業用途時,授權選項從$999開始。 這種定價結構旨在滿足不同專案大小和型別的需求,確保您可以選擇最適合您開發和分發計劃的授權。

常見問題

C# 中 const 關鍵字的目的是什麼?

在C#中,const 關鍵字用於定義在編譯時已知的常數欄位或值,讓它們在整個程式中保持不可變。

您如何在C#中宣告一個常數變數?

常數變數是使用 const 關鍵字宣告的,後接資料型別和初始值。例如,const int myConstValue = 100;

在C#中,const和readonly有什麼區別?

const 是一個編譯時常數,必須在宣告時初始化。它是靜態的,不能被修改。readonly 變數可以在宣告時或在構造函式內賦值,允許運行時初始化。

可以在C#的方法中宣告一個const變數嗎?

是的,const 變數可以在方法中宣告,稱為局部常數,只能在該方法中存取。

IronPDF如何將HTML轉換為PDF?

IronPDF使用 ChromePdfRenderer 類來將HTML字串、文件或URL轉換為PDF文件。

如何在C#常數中使用程式庫?

IronPDF可以使用C#常數,例如常數HTML模板字串,以有效地將HTML內容生成PDF文件。

為什麼在.NET應用程式中使用IronPDF?

IronPDF用於在.NET應用程式中建立、編輯和閱讀PDF文件,透過將HTML轉換為PDF來簡化PDF生成,同時保留佈局和樣式。

什麼是C#中的編譯時常數?

編譯時常數是在編譯時評估和固定的值。const 關鍵字確保變數是編譯時常數。

什麼是C#中的靜態構造函式?

靜態構造函式初始化類的靜態欄位,並在建立任何實例或存取靜態成員之前自動呼叫。

什麼是C#中的常數表達式?

常數表達式是可以在編譯時完全評估的表達式,使其可用於 const 宣告。

Jacob Mellor,首席技術官 @ Team Iron
首席技術官

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

Jacob擁有曼徹斯特大學的土木工程一等榮譽學士學位(BEng),於1998-2001年之間獲得。在1999年於倫敦創辦他的第一家軟體公司並於2005年建立了他的第一批.NET元組件後,他專注於解決Microsoft生態系統中的複雜問題。

他的旗艦IronPDF和Iron Suite .NET程式庫在全球獲得了超過3000萬次NuGet安裝依據,他的基礎程式碼基繼續支援著世界各地開發者使用的工具。擁有25年的商業經驗和41年的程式設計專業知識,他仍專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話