如何确定允许调用特定方法的对象类型?

时间:2012-04-17 01:08:27

标签: c# class access-modifiers

我有一个Node课程:

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

Graph类:

public class Graph
{
  ....
}

Node中的ID是只读的,但我只需要从Graph个对象设置其值,而不是从Graph类之外设置。我怎么能做到这一点?

3 个答案:

答案 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...
    }
}

这有用吗?