跳過到頁腳內容
.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);
    }
}
$vbLabelText   $csharpLabel

C# Const(對開發人員如何運作):圖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);
    }
}
$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);
    }
}
$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
$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
}
$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}");
    }
}
$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;
    }
}
$vbLabelText   $csharpLabel

此範例展示了如何使用靜態的構造函數來初始化一個靜態只讀字段,MaxUsers,其值可能從一個配置檔中在運行時期檢索。const字段,TimeoutSeconds,表示一個直接嵌入到代碼中的編譯時常數。

介紹 IronPDF

C# Const(對開發人員如何運作):圖4 - IronPDF

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

IronPDF的強大之處在於將HTML轉換為PDF,同時保留佈局和樣式。 它是從網頁內容(如報告、發票和文件)生成PDF的理想工具。 HTML文件、URLs和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");
    }
}
$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");
    }
}
$vbLabelText   $csharpLabel

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

輸出

這是輸出的PDF文件:

C# Const(對開發人員如何運作):圖5 - PDF輸出

結論

C# Const(對開發人員如何運作):圖6 - 授權

在C#中,const關鍵字是一個用於定義在編譯時已知不可變值的重要功能。它有助於提高程式碼的可讀性和可維護性,通過清楚說明哪些值是常數。 請記住,const變數隱含為靜態的,必須在宣告時初始化,並且它們的值必須是編譯時常數。 相較之下,readonly變數提供了更多的靈活性,但是在運行時期初始化的。

IronPDF不僅因其在PDF操作中的強大功能而突出,還因其靈活的採用模式而聞名。 對於希望探索其功能的開發者和組織,IronPDF提供免費試用,為其功能評估和整合提供了一個理想機會,且不需要初始投資。

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

常見問題解答

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 文件來將 HTML 轉換為 PDF。

如何將庫與 C# 常量一起使用?

IronPDF 可以使用 C# 常量,例如一個常量的 HTML 模板字符串,來通過將 HTML 內容高效地轉換為 PDF 來生成 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核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與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