2011-11-18 84 views
0

如果我创建了一个私有嵌套类,如何从调用类访问变量和方法?继承调用类的变量

例子:

public class ClassA 
    { 
     protected int MyVar=100; 

     public MethodA() 
     { 
     // <some code> 
     myObjectClassB.DoSomething(); 
     // <some code> 
     } 

     private class ClassB 
     { 
     public DoSomething() 
     { 
     } 
     } 
    } 

在上面的例子中,我需要ClassB的是能够访问ClassA.MyVar - 这可能吗?

回答

2

当你构造一个ClassB的实例时,给它一个对拥有它的ClassA的引用。

private class ClassB 
    { 
    private readonly ClassA _owner; 

    public ClassB(ClassA owner) 
    { 
      _owner = owner; 
    } 

    public DoSomething() 
    { 
    } 
    } 

有一点需要注意的是,私有嵌套类实际上可以通过_owner访问ClassA的私有成员。当你有一个内部帮助类需要访问整个类的私有状态时,这通常会派上用场。

0

好的,Dan Bryant打败了我,除了他忘了补充说,你必须在内部制作这个受保护的变量才能访问它。嵌套类与除命名约定外不嵌套的其他类没有区别。它并没有得到任何特别的证明,它嵌套在这个类中。它完全是一个嵌套的组织。

编辑:好吧,也许我错了。我其实读了Dan的其余答案,看起来也许我错了:)

编辑2:经过几次搜索后,我发现我的思维并不完全错误,但它取决于你的编译器正在处理。较早的C++规范不允许它,但大多数编译器都允许它,最终他们更改了文档以反映编译器中实际发生的情况。