哪一个好:
string sQuery = "SELECT * FROM table";
或
const string sQuery = "SELECT * FROM table";
为什么resharper总是建议我这样做?
答案 0 :(得分:20)
后者更好 - 这意味着:
“const”在从其他程序集和版本控制访问方面还有一些其他影响,但看起来这是一个私有字段,所以它不应该是一个问题。你可以 认为它是:
static readonly string sQuery = ...;
一般来说,我认为最好让字段静态(如果它不是按实例变化,为什么它应该是一个实例变量?)和只读当你可以(可变数据更难以原因)。如果您希望我详细了解static readonly
和const
之间的差异,请与我们联系。
答案 1 :(得分:4)
如果字符串永远不会改变并且永远不会在程序集之外使用,那么const是个好主意。如果它永远不会改变,但 在程序集之外使用,静态只读可能是一个更好的主意 - 在调用的站点上“烧入”,而不是存储在一个位置,因此重新编译程序集包含const的不会更新依赖程序集 - 它们也必须重新编译。另一方面,静态只读变量会在依赖程序集中更新。
答案 2 :(得分:1)
如果特定的字符串引用永远不会改变,则ReSharper仅建议这样做。在这种情况下,您使用const string
代替string
来表达您的意图。
答案 3 :(得分:1)
这样做是因为如果你不小心在你的代码中为sQuery分配了一个新值,如果它是一个const你将得到一个编译错误,所以它会在编译时捕获一个bug。与它的建议相同,即在ctor中设置的成员变量只是readonly