4

List別のクラスを使用してデータを格納するクラス(基本的にリンクされたリストなので、と呼びましょう)(ノードなので、クラスと呼びましょうNode)があります。Nodeには から呼び出さなければならないメソッドがありますがList、他の場所から呼び出すと面倒な場合があります。プログラムの他の部分で の参照を使用する必要がありますNodeが、変更するのは のみListです。C++ では、 へのプライベート ポインターを持ち、 の一部のメンバーを公開する別のクラス ( と呼びましょう)を作成し
ます。にアクセスできないようにすることなく、プログラムの残りの部分からへの参照を隠す方法は考えられませんでした。OpaqueNodeNodeListNodeNodeList
それを行う方法や、同じ機能を持つC#固有のイディオムはありますか?

List明確化:クラスだけに見えるようにしたいと思います。internalキーワードについてはすでに知っています。

4

3 に答える 3

2

C# には、情報を隠すための 2 つのレベルの粒度があります。

最も基本的なものはクラス自体です。これは、 member を宣言するときに取得するスコープですprivate。ノードとリストは異なるクラスであるため、これは目的には十分ではありません。

internal次は、キーワードを使用して指定されるアセンブリのレベルです。これは、リスト クラスとノード クラスが同じアセンブリを共有すると仮定すると、目的に使用できるはずです。

public class Node {
    internal void SpecialMethod() {
        ...
    }
}

明らかな欠点は、ノード クラスの内部メソッドが、リストだけでなく、ライブラリ内のすべてのクラスから見えることです。ただし、C++ の不透明な参照の内部は、内部ヘッダーにアクセスできるすべてのユーザーに表示されるため、2 つの言語間で機能が密接に一致していると主張する人もいるでしょう。

于 2014-09-20T16:11:47.623 に答える