代码之家  ›  专栏  ›  技术社区  ›  Matt

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

  •  23
  • Matt  · 技术社区  · 14 年前

    我正在使用ReSharper进行一个项目。有时它会提示我字段可以设置为只读。这有什么表现或其他好处吗?我认为这些好处是相当低级的,或者说任何好处都是纯粹的语义上的?

    谢谢

    在下面的示例中,该字段最初只是私有的,但resharper提示将其设置为只读。我理解为什么它可以设置为只读,也就是说,它被设置在构造函数中,并且不再更改,但是我只是想知道这是否有什么好处。。。

    public class MarketsController : Controller
    {
        private readonly IMarketsRepository marketsRepository;
    
        public AnalysisController(IMarketsRepository marketsRepository)
        {                
            this.marketsRepository = marketsRepository;
        }
    }
    

    查看MSIL最简单的方法是什么?

    5 回复  |  直到 14 年前
        1
  •  26
  •   Andrey    14 年前

    好处纯粹是语义上的。它将帮助代码用户明确地理解在创建对象之后不能更改此字段。编译器将防止对该字段进行不必要的更改。我完全同意下面的引语 Python Zen :

    显性比隐性好。

    一些细节:

    普通字段和只读字段之间的唯一区别是flag initonly

    .field public initonly int32 R
    
        2
  •  9
  •   tdammers    14 年前

    与其说是低级别的性能,不如说是更高级别的可维护性。使内容成为只读是您必须限制和控制某个值可以更改的位置数的可能性之一。这反过来意味着减少类之间的相互依赖性(又称“松散耦合”);结果是应用程序具有更少的内部依赖性,从而降低了复杂性。换句话说,只读字段和属性使应用程序更易于维护。

        3
  •  2
  •   Kimi    14 年前

        4
  •  2
  •   Vivian River    14 年前

    我的教授在那一天教我,声明某个东西是只读的,这是向你的计算机承认你犯了错误的一种方式。

        5
  •  1
  •   Community Lee Campbell    7 年前

    你可能对 this answer

    readonly关键字用于 将成员变量声明为常量, 但允许计算值 在运行时。这不同于 用常量声明的常量 在编译时设置。使用只读 可以设置字段的值 对象的构造函数 字段是的成员。