解析C#中的常量及如何在C#编程中定义常量

 更新时间:2016年01月29日 15:28:53   投稿:goldensun  
这篇文章主要介绍了C#中的常量及如何在C#编程中定义常量,是C#入门学习中的基础知识,需要的朋友可以参考下

常量是在编译时已知并在程序的生存期内不发生更改的不可变值。常量使用 const 修饰符进行声明。只有 C# 内置类型(System.Object 除外)可以声明为 const。
用户定义的类型(包括类、结构和数组)不能为 const。请使用 readonly 修饰符创建在运行时初始化一次即不可再更改的类、结构或数组。
C# 不支持 const 方法、属性或事件。
可以使用枚举类型为整数内置类型(例如 int、uint、long 等等)定义命名常量。
常量必须在声明时初始化。例如:

class Calendar1
{
  public const int months = 12;
}

在此示例中,常量 months 始终为 12,不可更改,即使是该类自身也不能更改它。实际上,当编译器遇到 C# 源代码(例如 months)中的常量修饰符时,将直接把文本值替换到它生成的中间语言 (IL) 代码中。因为在运行时没有与常量关联的变量地址,所以 const 字段不能通过引用传递,并且不能在表达式中作为左值出现。
System_CAPS_note注意
当引用在其他代码如 DLL 中定义的常量值时应十分谨慎。如果新版本的 DLL 为常量定义了新的值,程序仍将保留旧的文本值,直到针对新版本重新编译程序。
可以同时声明多个相同类型的常量,例如:

class Calendar2
{
  const int months = 12, weeks = 52, days = 365;
}

如果不会造成循环引用,用于初始化一个常量的表达式可以引用另一个常量。例如:

class Calendar3
{
  const int months = 12;
  const int weeks = 52;
  const int days = 365;

  const double daysPerWeek = (double) days / (double) weeks;
  const double daysPerMonth = (double) days / (double) months;
}

常量可标记为 public、private、protected、internal 或 protectedinternal。这些访问修饰符定义类的用户访问该常量的方式。有关更多信息,请参见 访问修饰符(C# 编程指南)。
因为常量值对该类型的所有实例是相同的,所以常量被当作 static 字段一样访问。不使用 static 关键字声明常量。未包含在定义常量的类中的表达式必须使用类名、一个句点和常量名来访问该常量。例如:

int birthstones = Calendar.months;

如何在 C# 中定义常量
常量是在编译时设置其值并且永远不能更改其值的字段。 使用常量可以为特殊值提供有意义的名称以代替数字文本(“幻数”)。
若要定义整数类型(int、byte 等)的常量值,请使用枚举类型。 有关更多信息,请参见 enum(C# 参考)。
若要定义非整型常量,一种方法是将它们分组到单个名为 Constants 的静态类中。 这要求对常量的所有引用都使用该类名作为前缀,如下面的示例所示。
示例

static class Constants
{
  public const double Pi = 3.14159;
  public const int SpeedOfLight = 300000; // km per sec.

}
class Program
{
  static void Main()
  {
    double radius = 5.3;
    double area = Constants.Pi * (radius * radius);
    int secsFromSun = 149476000 / Constants.SpeedOfLight; // in km
  }
}


使用类名限定符有助于确保您和使用常量的其他人了解到它是常量并且不能修改。

相关文章

  • Unity3D网格功能生成球体网格模型

    Unity3D网格功能生成球体网格模型

    这篇文章主要为大家详细介绍了Unity3D网格功能生成球体网格模型,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • LZW数据压缩算法的原理分析

    LZW数据压缩算法的原理分析

    我希望通过本文的介绍,能给那些目前不太了解lzw算法和该算法在gif图像中应用,但渴望了解它的人一些启发和帮助。抛砖引玉而已,更希望兄弟们提出宝贵的意见。
    2016-06-06
  • C#实现拼手气红包算法

    C#实现拼手气红包算法

    这篇文章主要为大家详细介绍了C#实现拼手气红包算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • 配置C#的系统环境变量的方法

    配置C#的系统环境变量的方法

    配置C#的系统环境变量的方法...
    2007-03-03
  • C#使用读写锁三行代码简单解决多线程并发的问题

    C#使用读写锁三行代码简单解决多线程并发的问题

    本文主要介绍了C#使用读写锁三行代码简单解决多线程并发写入文件时提示“文件正在由另一进程使用,因此该进程无法访问此文件”的问题。需要的朋友可以参考借鉴
    2016-12-12
  • 基于C#实现简单的二维码和条形码的生成工具

    基于C#实现简单的二维码和条形码的生成工具

    这篇文章主要为大家详细介绍了如何基于C#实现简单的二维码和条形码工具,用于二维码条形码的生成与识别,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • C# using语法糖图文详解

    C# using语法糖图文详解

    这篇文章主要给大家介绍了关于C# using语法糖的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • C#删除文件夹和文件到回收站示例

    C#删除文件夹和文件到回收站示例

    本文介绍了C#删除文件和文件夹到回收站的方法,平时都是使用File.Delete方法删除文件,这样删除之后就真没有了。下面的代码可以将文件删除放到回收站里
    2014-01-01
  • 浅析C# 9.0 新特性之 Lambda 弃元参数

    浅析C# 9.0 新特性之 Lambda 弃元参数

    这篇文章主要介绍了C# 9.0 新特性之 Lambda 弃元参数的的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,想学习c#的朋友可以了解下
    2020-06-06
  • C#中C/S端实现WebService服务

    C#中C/S端实现WebService服务

    本文主要介绍了C#中C/S端实现WebService服务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论