c# - 如果合适,将 C# 字段设置为只读有什么好处吗?

标签 c# resharper readonly cil

我正在使用 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/

相关文章:

c# - 从目录中删除只读属性

c# - 仅显示来自实体对象的 DataGrid 中的某些列

c# - OWIN 启动不工作

c# - C#忽略子字符串错误/警告

c# - 通过文本框将 SQL 数据插入 ASP.Net Web 应用程序中的表

c# - 检查 switch 语句中是否缺少默认情况

c# - 使用 ReSharper 将代码格式化为一行

visual-studio-2015 - 在哪里复制 Resharper 外部注释 XML 文件以供 Visual Studio 找到

c# - 触发器中的只读附加属性 (WPF)

c# - IList<T>.AsReadOnly 扩展方法不适用于引用类型集合