如果我创建一个私有嵌套类,我如何从调用类中访问变量和方法?
示例:
public class ClassA
{
protected int MyVar=100;
public MethodA()
{
// <some code>
myObjectClassB.DoSomething();
// <some code>
}
private class ClassB
{
public DoSomething()
{
}
}
}
在上面的示例中,我需要ClassB才能访问ClassA.MyVar - 这可能吗?
答案 0 :(得分:2)
构造ClassB的实例时,请为它拥有对拥有它的ClassA的引用。
private class ClassB
{
private readonly ClassA _owner;
public ClassB(ClassA owner)
{
_owner = owner;
}
public DoSomething()
{
}
}
有一点需要注意的是,私有嵌套类实际上可以通过_owner访问ClassA的私有成员。当你有一个需要访问类的整体私有状态的内部帮助器类时,这通常会派上用场。
答案 1 :(得分:0)
好的Dan Bryant击败了我,除了他忘了补充说你必须在内部制作受保护的变量才能访问它。嵌套类与除了命名约定之外没有嵌套的任何其他类没有什么不同。它没有得到它嵌入的类的任何特殊功能。它纯粹是一种组织的东西。
编辑:好的,也许我错了。在此之后我实际上读了Dan的其余部分,似乎我错了。)
编辑2:经过几次搜索后,我发现我的想法并不完全不正确,但这取决于你正在使用哪种编译器。较旧的C ++规范不允许这样做,但大多数编译器仍然允许它,最终他们更改了文档以反映编译器中实际发生的情况。