C# const变量详细描述

开发 后端
这里介绍C# const变量,在一个项目中,在dll局部升级时,如果改变了某个C# const变量的值,而未升级的dll如果也有这个C# const变量的话,显而易见这时候问题将是产生。

C#语言有很多值得学习的地方,这里我们主要介绍C# const变量,包括介绍getter与setter(属性存取器)可以像方法一样封装逻辑并且像变量一样使用等方面。

static readonly与C# const变量,作用是一样的,无论访问修饰符是不是public,还是其它(private、 protected、internal),变量名称一般为大写,中间以下划线。

  1. public static readonly int MAX_HEIGHT;  
  2. public const int MIN_HEIGHT = 10

有些程序员对大写不敏感,上例中,MAX_HEIGHT用Max_Height代替也未尝不可 ,甚至MaxHeight也可以。在.Net类库中,int.MaxValue与int.MinValue便是这样定义的。

const常量更确切的说是编译时常量,因为它在运行时是不存在的,在编译中所有变量引用将被实际值替掉。而 static readonly则不然,它在运行时也是存在的。从原理上讲,论效率const优于static readonly。但是在一个项目中,在dll局部升级时,如果改变了某个C# const变量的值,而未升级的dll如果也有这个C# const变量的话,显而易见这时候问题将是产生。如 果因此而升级全部dll,反而不值。所以在大型、多变应用中,建议使用static readonly代替const。其微乎其微的效率的减损对比 升级布置可能出现的问题还是可以接受的。

除了以上两种静态只读和常量变量之外,其它变量命名均以下划线开始,访问修改符为private(不建议命名为 internal、protected,更不建议命名为public):

  1. private static int _maxHeight;  
  2. private int _minHeight; 

如果其命名不前置下划线,易与参数变量混淆。对于下面这种定义:

  1. private int _minHeight = default(int);  
  2. public int MinHeight  
  3. {  
  4. set{  
  5. _minHeight = value;  
  6. }  
  7. get{  
  8. return _minHeight;  
  9. }  

初学者可能觉得有点画蛇添足,不如直接命名为:

  1. public int MinHeight; 

这样岂不简单,干吗还要用getter和setter封装起来,额外的函数调用也使效率有损。有时候在开发项目时,开始时我们要画的可能只是一条蛇,但是项目后期需求变了,改画一条龙了。所以在项 目初期画蛇的时候添上一对足还是很有远见的。

getter与setter(属性存取器)可以像方法一样封装逻辑并且像变量一样使用,建议所有非静态只读和常量,定 义为private,然后给其添加相应属性存取器,用于赋值与读取。在其它方法体内(包涵类外与类内),不建议直接读写变量。即使 它目前可以被直接读写,我们也要通过调用属性存取器也调用。这一点有点麻烦,但很重要,很高老手有时也会犯错误。如下所示:

  1. private int _minHeight = int.MinValue;  
  2. public int MinHeight//或者是 protected、internal,甚至是private  
  3. {  
  4. set{  
  5. _minHeight = value;  
  6. //即使这里目前没有其它处理逻辑  
  7. }  
  8. get{  
  9. return _minHeight;  
  10. }  
  11. }  
  12.  
  13. public void Method1 (int minHeight)  
  14. {  
  15. this.MinHeight = minHeight;//在这里不要使用 this._minHeight直接读写  
  16. //  

即使变量的访问是受保护的或者或者是私有的,也要使用属性存取器。原则是:对于变量的读取,要用属性存取器封装,无论其访问修饰符如何,即使其属性存取器内除了存取目前 没有任何其它逻辑。

【编辑推荐】

  1. C#类和结构简单介绍
  2. C# explicti和implicit详解
  3. C#编写ActiveX控件详细介绍
  4. C# StringBuilder和String浅析
  5. C#别名指示符学习经验
责任编辑:佚名 来源: 博客园
相关推荐

2009-09-07 15:15:43

2009-08-26 15:53:48

C#扩展方法

2009-08-10 16:40:03

C#索引器

2009-09-03 17:59:18

C#调用事件

2009-09-24 16:19:53

Hibernate应用

2009-09-14 16:33:55

LINQ To XML

2009-09-25 14:28:40

Hibernate S

2009-09-14 14:58:52

LINQ to XML

2009-09-14 13:14:49

LINQ序列

2009-08-26 17:31:59

C# const常量

2009-11-18 11:14:49

2010-02-05 16:58:18

Android服务

2009-10-10 10:04:50

RHEL合法使用

2009-09-25 11:04:32

Hibernate3实

2009-10-15 14:59:45

网络布线光纤技术

2009-09-08 11:09:39

LINQ数据源

2010-04-09 17:45:06

Oracle索引

2010-09-08 15:10:48

2011-11-02 09:29:42

存储虚拟化虚拟化

2009-10-13 17:16:40

VB.NET Web服
点赞
收藏

51CTO技术栈公众号