2

我有一Node堂课:

public class Node
{
    private string name;
    private Point3D location;
    private int id;
    .
    .
}

和一个Graph班级:

public class Graph
{
  ....
}

id inNode是只读的,但我只需要从Graph对象而不是从Graph类外部设置它的值。我怎样才能做到这一点?

4

3 回答 3

4

一种可能有帮助(但不能完全修复它)的选项是在属性上使用修饰符internal。这将属性的可访问性范围限制在它所属的程序集内,以及声明为朋友的任何程序集内。

话虽如此,您将 Id 公开但只能从 Graph 对象更改的要求违反了 OO 概念。解决此问题的一种方法是将 Node 对象的创建限制在 Graph 类中,或者从仅可用于 Graph 类的工厂方法中创建。如果你这样做并且只使用一个 getter 将 Id 属性公开为公共,并在构造函数中为其分配一个值,那么你将实现 90% 的你想要的。

于 2012-04-17T01:33:21.470 回答
2

您可以使Node该类成为类的私有嵌套类,Graph因此只有类可以访问和修改它,您可以拥有从类Graph中的公共方法访问图形节点的方法Graph

于 2012-04-17T01:14:58.150 回答
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...
    }
}

这行得通吗?

于 2012-04-17T01:48:56.007 回答