字符串和const字符串之间的区别

时间:2011-05-04 20:20:57

标签: c# refactoring

我使用的重构工具经常表明我改变了这样的东西:

string title = "Some title.";

const string title = "Some title.";

为什么,差异是什么?

谢谢!

9 个答案:

答案 0 :(得分:4)

const是常量变量的前缀。一个在运行时不会改变的。

通常如果你有一个满足这个要求的变量,你应该将它声明为常量(const),以避免代码中的错误并启用编译优化。

这就是重构工具为您完成的原因。

答案 1 :(得分:3)

嗯,在我看来,使用常量字符串的主要方面是自动中断常量字符串。因此,如果您有1000个类型具有常规字符串字段的实例,并且所有实例都存储了永远不会更改的相同字符串,那么将存储1000个相等的字符串实例,从而不必要地炸毁应用程序的内存配置文件。如果声明字符串常量,它将只消耗一次内存。这与直接使用字符串文字的行为相同。与静态只读字符串相比,常量字符串的值直接存储在引用类中。

答案 2 :(得分:2)

随着其他人的说法。 当您使用const声明局部变量时,编译器(在发布模式下)将使用IL中的const值替换变量的用法;导致堆叠较小。

字符串具体是一种特殊情况。在编译期间,编译器会运行一个字符串实习进程,其中您创建的字符串变量实际上可能指向现有字符串,或者一个新字符串...因为字符串是不可变的,所以通常不会太重要。这不是const字符串特有的,而是字符串文字。

const string title = ...的示例中,const表示该值在声明时分配,无法更改。

这是一个相关问题,可能包含您正在寻找的内容。

Is there a runtime benefit to using const local variables?

答案 3 :(得分:1)

要明确表明它没有改变,所以当有人读取你的代码(包括你自己)时,她会知道这个var不会改变。
该工具可能建议对于其他类型的变量,如果您以后不更改它们。这是一种很好的做法 当然,如果您稍后尝试更改它,您将收到编译错误。

答案 4 :(得分:1)

在您的示例中,非const title可以修改,但const不能修改。

例如,你可以这样做:

string title = "123";
title = "fool";

但不是

const string title = "123";
title = "foo"; // NO!

它无法编译。

答案 5 :(得分:1)

如果你不打算更改字符串的值(即它将保持不变)那么,最好明确指出它是一个常量 - 这应该对可读性方面有所帮助。从技术上讲,我所知道的唯一区别是常量与非常量不同,所有常量都是静态的。
只是我的2美分

答案 6 :(得分:0)

所有工具都建议基于它的分析,所讨论的字符串永远不会改变,所以你也可以使它成为常量,以便将来不能改变。

答案 7 :(得分:0)

似乎就像你不在其余代码中的任何地方更改标题所以它不是变量而是常量,这就是重构工具所暗示的......

答案 8 :(得分:0)

const是编译时间。使用const字符串时,最终在运行时没有为该变量使用空间。编译器以与宏无异的方式使用此值。当您不使用const字符串时,它的作用类似于任何其他变量,并且在运行时会占用额外的空间。