我正在使用 ReSharper 开展一个项目。有时它会提示我可以将某个字段设置为只读。这有什么性能或其他好处吗?我假设这些好处是非常低级的,或者任何好处都是纯语义的?
谢谢
在下面的示例中,该字段最初只是私有(private)的,但 resharper 提示将其设置为只读。我理解为什么它可以设置为只读的原因,即。它被设置在构造函数中并且没有再次更改,但只是想知道这是否有任何好处......
public class MarketsController : Controller
{
private readonly IMarketsRepository marketsRepository;
public AnalysisController(IMarketsRepository marketsRepository)
{
this.marketsRepository = marketsRepository;
}
}
编辑 查看 MSIL 的最简单方法是什么?
最佳答案
好处是纯粹的语义。它将帮助您的代码的用户明确了解创建对象后无法更改此字段。编译器将防止对该字段进行不必要的更改。我完全同意以下来自 Python Zen 的引述:
Explicit is better than implicit.
一些细节:
普通字段和只读字段之间的唯一区别是 IL 中的标志 initonly
。没有关于它的优化(与常量一样),因为实际上它允许所有操作(get 和 set,但仅限于 ctor)。它只是提示编译器:不要让它在构建后被更改。
.field public initonly int32 R
关于c# - 如果合适,将 C# 字段设置为只读有什么好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3395448/