虽然我理解这2个关键字的功能,但我不明白为什么要使用它们。
我做了很多研究,但我的大部分研究结果只讨论了使用const
或readonly
的时间和时间,或者每种情况之间的差异,但没有一个解释为什么。我们来看下面的例子:
const decimal pi = 3.142
decimal circumference = 2 * pi * //r
而不是
decimal pi = 3.142
decimal circumference = 2 * pi * //r
const/readonly
的目的是阻止人们更改价值,但不是用户有机会更改decimal pi
的值,那么为什么还要使用const
(或readonly
)?
请注意:我的问题是为什么我们使用const/readonly
,而不是“const/readonly
。
其他信息:我需要再次澄清这一点。我认为这个问题没有得到充分研究。我清楚地了解每个关键字的功能,但我不知道为什么我们甚至打扰使用它们。它真的能提高性能吗?或者它只是一种强调的“装饰性”方式:嘿 - 请不要改变我?
答案 0 :(得分:3)
编译器优化并告诉其他人开发人员他们不应该被修改。
答案 1 :(得分:1)
它不适合您的程序用户。它适用于其他程序员。它非常清楚地表明这个值不应该改变。 Pi永远不应该改变。在你的小例子中看起来有些愚蠢,但是当项目跨越数千行代码并分成函数时,它可能会有所不同。
此值也可以传递给具有不同名称的引用。程序员如何知道它不应该再被更改?也许他用关键字calculateValue得到它,他认为我不介意将其改为50.0用于我的用途。接下来他知道他改变了其他方法的价值。
答案 2 :(得分:1)
有几个原因。第一个是如果变量可以被外部代码访问,你不希望别人改变PI的定义,也就是说它明确表示这个变量永远不会改变,这确实为编译器提供了能力。做一些优化。然后还有这样一个事实:它可以防止你在你自己的代码中犯错并意外地改变一个常数值。
答案 3 :(得分:1)
“Const”的相似之处在于它的值不能改变,但也有很大的不同之处在于它的值在编译时应用。这使得它更具内存效率,因为在运行时不需要为“const”值分配内存。但请注意,与“readonly”相反,“const”仅支持值类型 - 不允许使用“const”引用类型。
在编写类库时,“readonly”和“const”之间存在一个有趣的含义。如果使用“const”,那么如果使用“const”的不同值分发新版本的库,则必须重新编译使用库的任何应用程序。相比之下,如果您使用“只读”成员,那么应用程序将获取修改后的值而无需重新编译(如您所知,如果您必须分发补丁或修补程序,这将简化您的生活)。 / p>
答案 4 :(得分:0)
有两个原因:
向其他开发者表明这是一个永远不会改变的价值。它可以帮助区分pi
(总是3.1415...
)之类的值,有时可能基于配置或用户输入的值,或其他一些情境条件。
沿着同样的路线,你可以帮助阻止其他开发人员做一些愚蠢的事情,比如试图为pi
变量分配一个新值,因为编译器会对它们大喊大叫。在这样一个简单的两行方法中,这不太可能成为一个问题,但随着您的代码库变得越来越复杂,它可以为人们节省大量时间来防止他们做的事情他们不会应该做的。
允许编译器进行优化。初始编译和JIT编译都可以利用有关您知道不会更改的值的信息。在您给出的示例中,当您使用const
关键字时,编译器将生成以下代码的等效代码:
decimal circumference = 6.284m * r;
注意每次调用方法时CPU不需要多个2 * pi,因为这是一个在编译时已知的值。
答案 5 :(得分:0)
不仅是关于用户,还关于开发人员我会说的。半年和20,000行代码之后 - 或者其他任何从事代码工作的人 - 可能只是忘记了这一点。
另外,使用常数时可能会改善性能