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];
        }
    }
}

这不会编译并给出此错误:

无法访问外部类型的非静态成员...

有没有办法在不通过构造函数参数传递变量或使用“静态”关键字的情况下访问外部类型的非静态成员(来自嵌套类)?

4

1 回答 1

7

我想问一下是否有一种方法可以访问外部类型的非静态成员(来自嵌套类),而无需通过构造函数参数传递变量或使用“静态”关键字。

不,没有办法从嵌套类中访问外部类的实例变量。

在 C# 中,嵌套类是完全独立的实例,与外部类实例没有直接关系。您需要将特定实例传递给Tree构造Node函数。

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

这样,当Tree创建它的节点时,它可以传递this给构造函数,它将被正确读取。不过,这里没有真正的缺点。由于Node具有私有可访问性,因此只有Tree实例才能在任何情况下构造实例。

于 2012-09-24T20:39:42.143 回答