C#类和只读成员

时间:2011-01-07 16:08:54

标签: c#

在C#中编写一个类时,如果只将它们分配给构造函数并且不会在类的其他地方进行更改,那么将所有私有成员变量标记为私有只读是一个好主意吗?或者这有点过头了吗?

6 个答案:

答案 0 :(得分:10)

是的,我个人认为这是一个好主意。我尝试尽可能保持类型不可变,并声明变量readonly是一个很好的开始。当然,这不是全部和最终 - 如果该变量是可变的(例如StringBuilder或数组)那么它实际上并没有那么多帮助。我仍然将变量设为只读,但显然我不想改变变量本身的值 - 并且防止自己在同一个类的其他地方意外地这样做,可能是几个月或几年之后。

答案 1 :(得分:4)

是的,这是readonly明确指出的。如果您已经知道(或者至少可以假设)您不打算将其分配到其他任何位置,那么将其标记为readonly是一个好主意。毕竟,删除 readonly比以后添加更容易。

答案 2 :(得分:1)

哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇哇我的意见是我总是只为变量创建属性。一个例子如下。

private int _myInt;
private int myInt {get{return _myInt;}}

答案 3 :(得分:0)

是的 - 您不会遇到其他开发人员编写的一些代码,这些代码稍后会被修改,而这些代码不知道它们应该是只读的。

答案 4 :(得分:0)

Readonly在通过构造函数传递服务引用的情况下非常有意义,即

public class MyViewModel { private readonly MyContext context; public MyViewModel(MyContext context) { this.context = context; } }

你显然不希望你的上下文被另一个上下文覆盖,因为你可以拥有很多依赖于类中特定服务的东西。如果它是构造函数参数,通常意味着您在该特定服务或对象上使用RELY来创建和保持对象的有效状态。所以readonly就是一个很好的指标。在属性上设置私有意味着你不能在类之外更改它,readonly是一个额外的约束,使事情更安全和可理解。

答案 5 :(得分:-1)

如果我只打算初始化一个变量而从不写入它,我会把它变成const。

http://en.csharp-online.net/const,_static_and_readonly