C#中const和readonly使用注意问题
来源:互联网 发布:织梦dedecms json api 编辑:程序博客网 时间:2024/06/06 00:05
C#中const和readonly使用,这个是我在将c语言的#define SERIAL_TEL_HSEQ_MASK 0XE0 改写成c#中的语法时发现的问题,所以参考了很多博客,和资料,其实本文并非原创,呵呵!
以下是const 和 readonly 的异同点:
1.const是静态类型。readonly可以是静态也可是实例类型。并且C#中const默认为static不用显示声明。
2.const必须是基元类型(什么是基元类型,请查阅MSDN)。readonly可以是任意类型。
3.const必须在声明时赋值,否则编译器不通过。readonly可以在声明时不赋值,而在静态构造函数中赋值。除了静态构造函数中以外,其他地方都不能对它更改。如:public readonly string m_Now = DateTime.Now.ToString();,m_Now会随着运行时实际情况变化而变化。
4.const在编译后会把const对应的值直接嵌入到代码中。而readonly则编译后是该变量的地址,而不是具体的值。
5.const可用于修饰class的field或者一个局部变量(local variable);而readonly仅仅用于修饰class的field。
6.const常量属于类级别(class level)而不是实例对象级别(instant object level),并且它不能跟static结合一起使用,该常量的值将由整个类的所有实例对象共同分享(详细论述参见后面的Remark区域)。
7.readonly常量既可以是类级别也可以是实例对象级别的,这取决于它的声明以及初始化工作怎么实施。readonly可以与static结合使用,用于指定该常量属于类级别,并且把初始化工作交由静态构造函数(static constructor)完成(有关如何把readonly常量声明为类级别或实例对象级别的论述清参见后面的Remark区域) 。
能被const修饰声明为常量的类型必须是以下的基元类型(primitive type):sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, float, bool, decimal, string。
object, 数组(Array)和结构(struct)不能被声明为const常量。
一般情况下,引用类型是不能被声明为const常量的,不过有一个例外:string。该引用类型const常量的值可以有两种情况,string或null。其实,string虽然是引用类型,但是.NET却对它特别处理,这种处理叫做字符串恒定性(immutable),使得string的值具有只读特性。有关字符串恒定性的内容,可以参考《Microsoft .NET框架程序设计(修订版)》。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/appoFeng/archive/2008/02/16/2099971.aspx
举个例子:
如果你需要声明的常量是普遍公认的并作为单个使用,例如圆周率,黄金分割比例等。你可以考虑使用C# const常量, 本来c语言是# define PI 3.1415926 可以改成 public const double PI = 3.1415926;。如果你需要声明常量,不过这个常量会随着实际的运行情况而决定,那么,readonly常量将会是一个不错的选择。如果要表示对象内部的默认值的话,而这类值通常是常量性质的,那么也可以考虑const。更多时候我们对源代码进行重构时(使用Replace Magic Number with Symbolic Constant),要去除魔数(Magic Number)的影响都会借助于const的这种特性。 注意使用const和readonly也得注意不能滥用!
1.保证只在一种情况下使用const。就是这个值像圆周率一样,永远不会因为任何外界因素改变。如果一个值会被另外程序集的类调用,那么不能使用const。
2.如果该字段没有readonly限制,那么默认它是可以被任意更改而程序不会出错的。像连接字符串,就应该加上readonly。readonly相当于一个只有get访问器的属性。什么时候该给一个字段加上readonly的限制,就问自己,如果它是个属性,需要给它提供set方法吗?
- C#中const和readonly使用注意问题
- C# 中使用readonly关键字和const的区别
- C#中const和readonly和static readonly区别
- C#中 const 和 readonly 的区别
- C#中 const 和 readonly 的区别
- C#中 const 和 readonly 的区别
- C#中 const 和 readonly 的区别
- C#中 const 和 readonly 的区别
- C#中 const 和 readonly 的区别
- C#中 const 和 readonly 的区别
- C#中 const 和 readonly 的区别
- C#中 const 和 readonly 的区别
- C#中const和readonly的区别
- C#中 const 和 readonly 的区别
- C#中Const和Readonly的区别
- C#中const和readonly的区别
- C#中const和readonly的区别
- C#中const和readonly的区别
- 计数问题
- 国外优秀开源PHP建站程序一览
- File Fragmentation-ACM
- 简易加密算法,用于字符串加密
- C# 通用类库系列文章索引
- C#中const和readonly使用注意问题
- ObjectARX开发环境的创建与开发实例Hello World(VS2005+AutoCad2008+ObjectArx2008)
- CAN-BUS与LIN-BUS的技术参数对比
- App Store生存:iOS开发者经验分享
- PHP预定义变量
- insmod和modprobe
- BITMAPINFO结构体
- 开发板移植android屏幕关闭
- informix 的安全访问控制机制