【发布时间】:2011-06-05 09:04:23
【问题描述】:
在 C# 中编写类时,如果所有私有成员变量仅在构造函数中分配并且不会在类中的其他地方更改,那么将所有私有成员变量标记为私有只读是否是个好主意?或者这是矫枉过正?
【问题讨论】:
-
感谢所有 cmets。我将继续并将我的成员标记为只读。干杯。
标签: c#
在 C# 中编写类时,如果所有私有成员变量仅在构造函数中分配并且不会在类中的其他地方更改,那么将所有私有成员变量标记为私有只读是否是个好主意?或者这是矫枉过正?
【问题讨论】:
标签: c#
是的,我个人认为这是个好主意。我尽量保持类型不可变,声明一个变量readonly 是一个很好的开始。当然,这不是全部和全部 - 如果该变量是可变的(例如 StringBuilder 或数组),那么它真的没有太大帮助。我仍然会将变量设置为只读,以表明我不想更改变量本身的值 - 并防止自己在同一个班级的其他地方意外地这样做,可能是几个月或几年后。
【讨论】:
final 不仅仅适用于变量 - 它是 C# 中 readonly 和 sealed 的组合...如果您开始询问伙计们,是否应该密封课程,你会看到更激烈的争论......
是的,这就是readonly 的具体指示。如果您已经知道(或至少可以假设)您不会将其分配到其他任何地方,那么将其标记为readonly 是个好主意。毕竟,删除 readonly 比以后添加要容易。
【讨论】:
是的 - 您不会遇到问题,因为它们的值稍后会被其他不知道它们应该是只读的开发人员编写的代码修改。
【讨论】:
哇,这是一个多么好的问题,一个纯粹会用意见来回答的问题。我的观点是我总是只为变量创建属性。一个例子如下。
private int _myInt;
private int myInt {get{return _myInt;}}
【讨论】:
如果我只初始化一个变量并且从不写它,我会把它设为 const。
【讨论】:
Readonly 在您通过构造函数传递服务引用的情况下非常有意义,即
public class MyViewModel
{
private readonly MyContext context;
public MyViewModel(MyContext context)
{
this.context = context;
}
}
你显然不希望你的上下文被另一个覆盖,因为你可以有很多东西依赖于类中的特定服务。如果它是构造函数参数,这通常意味着您依赖该特定服务或对象来创建和保持对象的有效状态。所以 readonly 是一个很好的指标。在属性上设置私有意味着您不能在类之外更改它,只读是一个额外的约束,它使事情更加安全和易于理解。
【讨论】: