C#嵌套 - 访问外部类型的成员

时间:2012-09-24 20:31:08

标签: c# class nested

  

可能重复:
  Nested type problem

假设我有这段代码:

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”关键字?

2 个答案:

答案 0 :(得分:7)

  

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

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

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

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

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

答案 1 :(得分:0)

这不是您的代码的问题。检查此链接,因为这已经在

之前得到了解答

Nested type problem