比较C#的静态常量(const)和动态常量(static和readonly)
来源:互联网 发布:企业网站html源码 编辑:程序博客网 时间:2024/06/13 12:46
//静态常量(隐式是静态的)
public const int compiletimeConstant = 1;
//动态常量
public static readonly runtimeConstant = 1;
静态常量在编译时会将其替换为所对应的值,也就是说下面这2句话通过编译器编译后产生的IL是一样的。
//通过编译后二者会被翻译成相同的中间语言
int myNum = compiletimeConstant;
int myNum = 1;
动态常量的值是在运行时获得的。IL中将其标为只读常量,而不是用常量的值代替。
静态常量只能被声明为简单的数据类型(内建的int和浮点型)、枚举或字符串。下面的程序段是通不过编译的。你不能用new关键字初始化一个静态常量,即便是对一个值类型来说。
//这样是错误的
public const DateTime myDateTime = new DateTime(2006,9,1,0,0,0);
//这样是可以的
public static readonly DateTime myDateTime = new DateTime(2006,9,1,0,0,0);
只读数据也是常量的一种,它们不能在构造器初始化之后被修改。但是它同静态常量不同,它的值是在运行时才被指派的,因此就会获得更大的灵活性。动态常量可以是任意的数据类型。
二者最大的差别在于:静态常量在编译时会将其换为对应的值,这就意味着对于不同的程序集来说,当你改变静态常量的时候需要将其重新编译,否则常量的值不会发生变化,可能引发潜在的问题,而动态常量就不会有这种情况。
用const定义的常量(隐式是静态的),需要像访问静态成员那样去访问const定义的常量,而用对象的成员方式去访问会出编译错误。声明的同时要设置常量值。
从另一方面来说,如果你的确要声明一些从不改变且处处唯一的常量,例如钩子函数SetWindowsHookEx的idHook参数或序列化时的版本等,就应该使用静态常量。但是用到这样的常量的机会不多。一般来说我们应该使用灵活性更高的动态常量。
静态常量 动态常量
内存消耗 无 因为要保存常量 有消耗
初始化 很少的简单类型, 任意类型,可以在类构造函数中赋值
不能new,必须在
声明同时赋值
何时发挥作用 编译时进行替换 相当于类中的数据成员
声明:本文转载自http://hi.baidu.com/mr_handy/blog/item/dcbfcd285b74e8f498250a49.html
- 比较C#的静态常量(const)和动态常量(static和readonly)
- 比较C#的静态常量(const)和动态常量(static和readonly)
- C#中静态常量(const)和动态常量(static readonly)的一些区别
- C#中的静态常量(const)和动态常量(static和readonly)用法和区别
- C#中的静态常量(const)和动态常量(static和readonly)用法和区别
- const常量和readonly常量的比较
- C#中两种常量比较--const,readonly
- 静态常量和动态常量
- const常量和readonly只读变量
- C# const、readonly和static
- C#学习笔记2-静态常量和动态常量
- 静态变量(static变量)和常量(const 类型)
- 详细解释下 const 常量 和 readonly 常量 的区别吧。
- const,readonly和static readonly的区别
- C++ 类的const常量,Static变量和…
- const 和 readonly 的比较
- C# static const和readonly区别
- C# const和static readonly区别
- 遍历文件夹下文件
- ipod 硬件检测
- Android开发中使用Eclipse创建工程后提示The project cannot be built until build path errors are resolved问题的解决方法
- 图片自动切换并改变链接代码
- SQL 中文排序方式
- 比较C#的静态常量(const)和动态常量(static和readonly)
- VC中字符串类型的互相转换
- BI通用流程
- asp.net导出excel
- 寻数据库原理的视频
- 字符设备中的几个函数分析
- java,异常处理,throwable和try...catch[zz]
- set方法注入依赖属性
- 嵌入式 交叉编译Qt 时 可能出现的问题