可能重复:
嵌套类型问题
假设我有这段代码:
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];
}
}
}
Run Code Online (Sandbox Code Playgroud)
这不编译并给出此错误:
无法访问外部类型的非静态成员...
有没有办法访问外部类型的非静态成员(来自嵌套类)而不通过构造函数参数传递变量,也不使用"static"关键字?
我想问一下是否有办法访问外部类型的非静态成员(来自嵌套类),而不通过构造函数参数传递变量,也不使用"static"关键字.
不,无法从嵌套类中访问外部类的实例变量.
在C#中,嵌套类是完全独立的实例,与外部类实例没有直接关系.您将需要的特定实例传递Tree到Node构造函数.
Node(Tree parent)
{
objects = new object[parent.nodeCapacity];
}
Run Code Online (Sandbox Code Playgroud)
这样,当Tree创建它的节点时,它可以传递this给构造函数,并且它将被正确读取.但是,这里没有真正的缺点.由于Node具有私有可访问性,Tree因此在任何情况下只有实例可以构造实例.