【发布时间】:2009-05-26 08:57:03
【问题描述】:
哪个好:
string sQuery = "SELECT * FROM table";
或
const string sQuery = "SELECT * FROM table";
为什么 resharper 总是建议我这样做?
【问题讨论】:
哪个好:
string sQuery = "SELECT * FROM table";
或
const string sQuery = "SELECT * FROM table";
为什么 resharper 总是建议我这样做?
【问题讨论】:
后者更好——这意味着:
在从其他程序集访问和版本控制方面,“const”还有一些其他影响,但看起来这是一个私有字段,所以它不应该成为问题。您可以大部分将其视为:
static readonly string sQuery = ...;
一般来说,我认为在可能的情况下将字段设为静态(如果它不因实例而变化,为什么它应该是实例变量?)并在可能的情况下设为只读(可变数据更难原因)。如果您希望我详细了解static readonly 和const 之间的区别,请告诉我。
【讨论】:
如果字符串永远不会改变并且永远不会在程序集之外使用,那么 const 是一个好主意。如果它永远不会改变,但 在您的程序集之外使用,则静态只读可能是一个更好的主意 - 常量在调用站点“烧录”,而不是存储在一个位置,因此重新编译程序集包含 const 的组件不会更新依赖程序集——它们也必须重新编译。另一方面,静态只读变量会在依赖程序集中得到更新。
【讨论】:
ReSharper 仅在特定字符串引用从未更改时才建议这样做。在这种情况下,您可以使用const string 而不仅仅是string 来表达您的意图。
【讨论】:
这样做是因为如果您不小心在代码中为 sQuery 分配了一个新值,如果它是一个 const,您将得到一个编译错误,因此它会在编译时捕获一个错误。与它的建议相同,将在 ctor 中设置的成员变量设置为只读
【讨论】: