.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变量可以在声明时或在类的构造函数中赋值。 这提供了一定的灵活性,因为只读字段可以根据用于实例化类的构造函数而具有不同的值。

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 - 只读字段输出

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

这个示例演示了使用静态构造函数来初始化只读静态字段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# Const(开发人员如何使用):图5 - 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# 线程睡眠方法(开发人员如何使用)
下一步 >
RabbitMQ C#(开发人员如何使用)