我有一个Node
课程:
public class Node
{
private string name;
private Point3D location;
private int id;
.
.
}
和Graph
类:
public class Graph
{
....
}
Node
中的ID是只读的,但我只需要从Graph
个对象设置其值,而不是从Graph
类之外设置。我怎么能做到这一点?
答案 0 :(得分:4)
可能帮助(但不完全修复)的一个选项是在属性上使用修饰符internal。这会将属性的可访问范围限制在它所属的程序集中,以及声明为朋友的任何程序集。
话虽如此,您要求公开但仅可从Graph对象更改的要求违反了OO概念。解决此问题的一种方法是将Node对象的创建限制在Graph类中,或者仅限于Graph类可用的工厂方法。如果你这样做并将Id属性公开为只有getter的公共属性,并在构造函数中为它赋值,那么你将达到你想要的90%。
答案 1 :(得分:2)
你可以使Node
类成为Graph
类的私有嵌套类,这样只有Graph
类才能访问和修改它,你可以使用公共方法访问图形节点的方法在Graph
类
答案 2 :(得分:0)
public NameSpace{
public class Node{
public int Id { get; internal set; }
// rest of the code...
}
public class Graph{
// Node Id can be set here...
}
}
这有用吗?