解析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
  }
}


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

相关文章

  • C# Socket粘包处理讲解示例

    C# Socket粘包处理讲解示例

    这篇文章主要介绍了C# Socket粘包处理讲解,大家可以参考使用
    2013-12-12
  • C#中动态数组用法实例

    C#中动态数组用法实例

    这篇文章主要介绍了C#中动态数组用法,实例分析了C#中ArrayList实现动态数组的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • c#一个定时重启的小程序实现代码

    c#一个定时重启的小程序实现代码

    今天有个朋友找我问有没有一些能像Windows一样计划任务重启的软件,我也不清楚。他它说能让我做一个给他它么?我考虑了一下,他的服务器都是有安装.NET框架的,那可以用.NET来使下~~!
    2008-09-09
  • c#事件使用示例详解

    c#事件使用示例详解

    这篇文章主要介绍了c#事件使用方法,下面我们利用一个例子来加深我们对事件的理解,需要的朋友可以参考下
    2014-04-04
  • C#对文件进行加密解密代码

    C#对文件进行加密解密代码

    本文给大家分享的是使用C#对文件进行加密解密的代码,十分的简单实用,有需要的小伙伴可以参考下。
    2015-07-07
  • c# RSA非对称加解密及XML&PEM格式互换方案

    c# RSA非对称加解密及XML&PEM格式互换方案

    这篇文章主要介绍了c# RSA非对称加解密及XML&PEM格式互换方案,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2020-12-12
  • 获取wince mac地址与IP地址解决方案

    获取wince mac地址与IP地址解决方案

    由于需要进行身份的验证,需要获取移动终端的MAC地址,于是在网上进行搜索整理一番,现在将实现获取MAC地址的方法与大家共享
    2012-12-12
  • C#中的delegate委托类型基本学习教程

    C#中的delegate委托类型基本学习教程

    这篇文章主要介绍了C#中的delegate委托类型基本学习教程,委托是C#语言所具有的一个重要特性,需要的朋友可以参考下
    2016-01-01
  • C#自定义针对URL地址的处理类实例

    C#自定义针对URL地址的处理类实例

    这篇文章主要介绍了C#自定义针对URL地址的处理类,实例分析了C#解析URL地址实现URl参数加密解密及参数解析的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-03-03
  • C#避免回溯方法心得

    C#避免回溯方法心得

    这篇文章主要介绍了C#避免回溯方法,以实例的形式讲述了回溯方法的弊端及解决处理方法,是非常实用的技巧,需要的朋友可以参考下
    2014-09-09

最新评论