谁能说出C#中常量的含义是什么?
例如,做什么有什么好处
const int months = 12;
Run Code Online (Sandbox Code Playgroud)
而不是
int months = 12;
Run Code Online (Sandbox Code Playgroud)
我知道常量不能改变,但为什么不只是...在初始化之后不改变它的值?
Gab*_*abe 31
如果编译器知道某个值是常量并且永远不会更改,则它可以将该值直接编译到您的程序中.
如果你声明pi是一个常量,那么每次它看到pi / 2编译器都可以进行计算并将1.57 ...直接插入到编译的代码中.如果您声明pi为变量,那么每次程序使用pi / 2计算机时都必须引用pi变量并将其乘以0.5,这显然较慢.
我还应该补充说,C#具有readonly编译器无法计算的值,但在程序执行期间不能更改.例如,如果你想要一个常量ProgramStartTime,你必须声明它,readonly DateTime ProgramStartTime = DateTime.Now因为它必须在程序启动时进行评估.
最后,你可以通过给它一个getter而不是setter来创建一个只读属性,如下所示:
int Months { get { return 12; } } 但作为一个属性,每次阅读它时都不必具有相同的值,如下所示:
int DaysInFebruary { get { return IsLeapYear ? 29 : 28 } }
lad*_*dge 14
当下列情况之一获得时,"不能改变"和"不会改变"之间的区别才真正变得明显:
在谈论数据可访问性时会出现非常类似的问题.我们的想法是,您希望您的代码只提供您想要的灵活性,因为否则某些人(可能是您)会出现并执行您不想要的操作,这会导致错误!
如果你永远不犯错误,你工作的任何团队中的任何人都不会犯错误,你永远不会忘记你已经定义的变量的确切目的,即使在回到几个月或几年没有看过的代码之后,你和你你工作的每个人100%可靠地识别,理解并遵循你不打算使用内置语言结构时永远不会改变const值的意图,这种结构既清楚地表明并强制执行const,那么不,没有意义.
如果这些事情中的任何一个事实证明并非如此,那就是重点.
至于我,我发现,即使我最清醒,一次记住超过七件事几乎是不可能的,所以我会尽我所能来防止错误,特别是当成本是一个关键字.如果你比我更聪明,而且你永远不必与一个不如你聪明的人一起工作,那么就做你想做的事.
在某些情况下,可能会有一些编译器优化可以基于constness进行(常量折叠,对于一个,它在编译时折叠由常量组成的表达式).但通常情况下,这不是重点.
| 归档时间: |
|
| 查看次数: |
1695 次 |
| 最近记录: |