2

私はNodeクラスを持っています:

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

Graphクラス:

public class Graph
{
  ....
}

のIDNodeは読み取り専用ですが、クラスGraphの外部からではなく、オブジェクトからのみ値を設定する必要があります。Graphどうすればこれを達成できますか?

4

3 に答える 3

4

役立つ可能性がある(完全に修正するわけではない)オプションの 1 つは、プロパティで修飾子internalを使用することです。これにより、プロパティのアクセシビリティ スコープが、メンバーであるアセンブリ内、およびフレンドとして宣言されたすべてのアセンブリに制限されます。

そうは言っても、 Id を公開するが Graph オブジェクトからのみ変更可能にするという要件は、オブジェクト指向の概念に違反しています。これを回避する方法は、Node オブジェクトの作成を Graph クラス内に制限するか、Graph クラスでのみ使用可能なファクトリ メソッドから制限することです。これを行い、getter のみで Id プロパティを public として公開し、コンストラクターで値を割り当てると、目的の 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 に答える