2

重複の可能性:
ネストされたタイプの問題

私がこのコードを持っているとしましょう:

public class Tree
{
    private readonly int nodeCapacity;
    public int NodeCapacity { get { return nodeCapacity; } }

    public Tree(int nodeCapacity)
    {
        this.nodeCapacity = nodeCapacity;
    }

    private class Node
    {
        object[] objects;
        Node()
        {
            objects = new object[nodeCapacity];
        }
    }
}

これはコンパイルされず、次のエラーが発生します。

外部タイプの非静的メンバーにアクセスできません...

コンストラクターパラメーターを介して変数を渡したり、「static」キーワードを使用したりせずに、(ネストされたクラスから)外部型の非静的メンバーにアクセスする方法はありますか?

4

1 に答える 1

7

コンストラクターパラメーターを介して変数を渡したり、「static」キーワードを使用したりせずに、(ネストされたクラスから)外部型の非静的メンバーにアクセスする方法があるかどうかを尋ねたいと思います。

いいえ、ネストされたクラス内から外部クラスのインスタンス変数にアクセスする方法はありません。

C#では、ネストされたクラスは完全に別個のインスタンスであり、外部クラスインスタンスとは直接関係がありません。Treeの特定のインスタンスをNodeコンストラクター に渡す必要があります。

Node(Tree parent)
{
    objects = new object[parent.nodeCapacity];
}

このように、Treeがノードを作成するときthisに、コンストラクターに渡すことができ、正しく読み取られます。ただし、ここには本当の欠点はありません。Nodeプライベートアクセスが可能であるため、どのような場合でもインスタンスのみがTreeインスタンスを構築できます。

于 2012-09-24T20:39:42.143 に答える