日期:2014-05-17  浏览次数:20854 次

问个关于常量和方法的菜鸟问题!
我们知道,常量const其实是static 类型,虽然不用指明,今天遇到个例子,对于例如PI的值,好的设计是设为const而不是返回值的static方法!然后我想问,不从写或用代码的简洁上说,它们在性能上有什么很大的区别么?

------解决方案--------------------
一个是可以直接读取数据,一个是经过运算获取的数据,你觉得那个性能好?
------解决方案--------------------
引用:
引用常量const其实是static 类型

这是谁说的?本质区别大大的。
const是编译时常量,编译完就没用了。
static 是变量,运行时才取得。

在编译后你会发现,其实const被编译成了static的了。也就是说const本质其实就是静态的。
只不过是const的值确定于编译时,属于类型级。它被编译后保存在模块的元数据中。因为它默认是静态的,所有不能与static同时使用。
同时声明const字段时必须赋初始值,其类型只能是基元类型,并且在构造函数中无法更改它的值。
因此,对于PI这种恒定不变的数值建议声明为常量。
------解决方案--------------------
const int a = 10;

int b = a;

编译之后你会发现
int b = 10;
跟a一点关系都没有了。
运行时的a其实一点意思都没有。

而static 作为变量,在运行时是有意义的,反而在编译时是没有意义的。


显著的区别在于。
如果你在A.dll中定义了一个const int a= 10;
在B.dll中使用了 int b = A.a;
那么将来有一天,你的a需要改为20。
那么你的B.dll也需要重新编译。

所以,在C#中除了一些常规来说是固定不变的值,一般不推荐使用const,什么叫固定不变的,比如一周有7天,一天有24小时等等。