创建接口readonly
是否有意义?
使用Resharper 8.0时,我得到了以下建议,我不确定这对我有什么帮助。
我从研究中发现了什么(目前尚不清楚它如何对待界面):
引用:What are the benefits to marking a field as `readonly` in C#?
答案 0 :(得分:2)
这个问题根本不重要。首先,正如@CodeCaster所提到的,它与接口无关,而ReSharper可能会对所有领域都这样做。
将readonly放在私有字段上的假设值是指示未来的维护者,他们可能希望在编写类时更改您不考虑更改该字段的字段的值。这意味着他们在改变时必须考虑该领域的所有用途。这在实践中并不是什么大不了的事情,如果你不打扰它并在你的代码中加入它,你就可以做到这一点。另一方面,如果您不希望为所有代码执行此操作,则只有在您特别考虑并确定此字段不应更改或某些内容会中断时,才能更好地使用readonly。这是一个违约问题。
答案 1 :(得分:0)
识别两种不同类型的基类是很重要的,这些基类会有一个基类本身永远不会在构造函数之外写入的字段:
表示不可变值的类。在许多情况下,这些的基本字段应该被标记为只读,否则基础应该为派生类提供一种限制手段来编写它们(某些场景可能需要派生类在基类实例之间写入字段构建,以及它暴露于外部世界的时间,但如果有必要,基类应该明确地为此设计。
摘要"可读"具有可变和不可变衍生物的基类。在这种情况下,基类类字段绝对不应该是只读的,因为派生类可能合法地需要编写它们。
在不知道哪种情况适用的情况下,很难说哪种字段合适。如果一个人试图产生第二种类,另一种选择是抽象类不具有任何字段,而是将其属性getter链接到虚方法。如果需要编写一个不直接保存数据的派生类,而是封装一个可读的视图"那么这种情况可能会有所帮助。存储在别处的数据。