【发布时间】:2012-04-17 01:08:26
【问题描述】:
我有一个Node 类:
public class Node
{
private string name;
private Point3D location;
private int id;
.
.
}
还有一个Graph 类:
public class Graph
{
....
}
Node 中的 id 是只读的,但我只需要从 Graph 对象而不是从 Graph 类之外设置它的值。我怎样才能做到这一点?
【问题讨论】:
-
"节点类中的 id 是只读的,但我只需要从 Graph 对象中设置它的值" 这听起来像是一个糟糕的设计。将节点 ID 保持只读是一件好事,但是一旦程序的任何部分尝试更改节点 ID,您就会失去不变性的好处。
-
这个问题很不清楚。请考虑改进它。
-
@AdamMihalcin 如果 id 是只读的,一旦初始化,其他东西怎么能改变它?实际上,在使实体不可变时,您需要将字段标记为只读。
-
@DarthVader 当然,您不能更改只读字段。我是说放弃只读并引入突变是一个坏主意。但是,您不需要将字段标记为只读以使对象不可变。如果您定义了一个密封类,其属性都具有公共 get 和私有 set,并且除了构造函数之外什么都使用 setter,那么您没有使用
readonly关键字,但是您已经构建了一个其对象不能被任何外部改变的类代码。
标签: c# class access-modifiers