加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、容器安全、数据加密、云日志、云数据迁移!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

C# 定义常量 两种实现方法介绍

发布时间:2023-06-12 16:00:24 所属栏目:语言 来源:转载
导读:   在C#中定义常量的方式有两种,一种叫做静态常量(Compile-time constant),另一种叫做动态常量(Runtime constant)。前者用“const”来定义,后者用“readonly&rdquo
  在C#中定义常量的方式有两种,一种叫做静态常量(Compile-time constant),另一种叫做动态常量(Runtime constant)。前者用“const”来定义,后者用“readonly”来定义。 对于静态常量(Compile-time constant),它的书写方式如下:
 
  public const int MAX_VALUE = 10;
 
  为什么称它为静态常量呢,因为如上声明可以按照如下理解(注意:如下书写是错误的,会出编译错误,这里只是为了方便说明)。
 
  public static const int MAX_VALUE = 10;
 
  用const定义的常量,对于所有类对象而言都是一样的,因此需要像访问静态成员那样去访问const定义的常量,而用对象的成员方式去访问会出变异错误。此外,对于静态常量的访问在编译的时候,是用常量的值去替换常量,例如:
 
  int nValue = MAX_VALUE;
 
  这句在编译之后,和如下这句所产生的中间语言代码是一样的。
 
  int nValue = 10;
 
  不过,在用const来定义常量的时候,在类型上有很多限制。首先,此类型必须属于值类型,同时此类型的初始化不能通过new来完成,因此一些用struct定义的值类型常量也不能用const来定义。
 
  相对于const而言,用readonly来定义常量要灵活的多,它的书写方式如下:
 
  public readonly int MAX_VALUE = 10;
 
  为什么称为动态变量,因为系统要为readonly所定义的常量分配空间,即和类的其他成员一样拥有独立的空间。此外,readonly所定义的常量除了在定义的时候可以设定常量值外,还可以在类的构造函数中进行设定。由于readonly所定义的常量相当于类的成员,因此使用const来定义常量所受到的类型限制,在使用readonly去定义的时候全部消失,即可以用readonly去定义任何类型的常量。 综合上面所述,至于对比两者之间的区别具体如下。
 
  静态常量(Compile-time constant) 动态常量(Runtime constant)
 
  定义 声明的同时要设置常量值。声明的时候可以不需要进行设置常量值,可以在类的构造函数中进行设置。
 
  类型限制 首先类型必须属于值类型范围,且其值不能通过new来进行设置。 没有限制,可以用它定义任何类型的常量。
 
  对于类对象而言 对于所有类的对象而言,常量的值是一样的。 对于类的不同对象而言,常量的值可以是不一样的。
 
  内存消耗 无。 要分配内存,保存常量实体。
 
  综述 性能要略高,无内存开销,但是限制颇多,不灵活。 灵活,方便,但是性能略低,且有内存开销。
 
  对于在定义常量的时候,到底是用const来定义还是readonly来定义,我以前为了追求性能,因此尽量用const来定义。但是在此书中,提到了一个关于使用const会产生潜在的bug。就是在程序中使用DLL类库某个类的静态常量时,如果在类库中修改静态常量的值,其它接口没有发生变化,一般来说,程序调用端是不需要重新编译,直接执行就可以调用新的类库。不过就是在此情况下,会产生潜在的bug。这是由于静态常量在编译的时候,是用它的值去替换常量,因此在调用端的程序也是这样进行替换的。例如:在类库中定义了一个静态常量
 

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章