日期:2014-05-19  浏览次数:21101 次

c# const 赋值
int   a=1;
const   int   b=a;

为什么给b赋值的时候不能用变量啊。

我认为,赋值的那一刻,变量是不会变的呀,就当常量用也行吧?

------解决方案--------------------
那按你的逻辑,哪样的才是变量哪样的才是常量呢?
------解决方案--------------------
往往我们在大型程序中, 我们不能确定a目前的值是否能满足b的要求。所以引入常量的概念了。。
理论上是可以的,但是这样是不允许的,规则!
------解决方案--------------------
如果你不能理解

你试试下面两段程序

//first
int a = 100000;
int b = a * a;

//second
int b = 100000 * 100000;

你应该就了解什么是编译时,什么是运行时了

最后你在运行一下这段
//third
const int a = 100000;
int b = a * a;
------解决方案--------------------
const本来就是来定义常量的,

const int b=5;也就是意思用b代替5,且不可能改变
------解决方案--------------------
最起码省下了压栈出栈的时间,常量就是个实际数值,是不用压栈的。
你想想
const int j=9;
int i=8+j;

int i=8+9;

其实在机器语言是一样的........

你要是写成
int j=9;
int i=8+j;
那就另一回事了。



------解决方案--------------------
可以用readonly的变量来模拟常量,可以在构造函数中初始化
------解决方案--------------------
定义常量是为了维护方便

比如你的程序中大量应用一个数值,虽然这个数值是固定的,但换一种环境,该值是有可能变化的,但使用此常量的程序却是不变的,那么,修改一个源码,把常量改成另一个值,重编译就好了

至于在程序中定义为常量,是为了防止使用不当,造成修改,引起错误
------解决方案--------------------
最起码省下了压栈出栈的时间,常量就是个实际数值,是不用压栈的。
你想想
const int j=9;
int i=8+j;

int i=8+9;

其实在机器语言是一样的........

你要是写成
int j=9;
int i=8+j;
那就另一回事了。
--------------------
--------------------同意,可以解释编译时的好处