继承调用类的变量

时间:2011-11-18 23:40:07

标签: c#

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

示例:

   public class ClassA
   {
      protected int MyVar=100;

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

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

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

2 个答案:

答案 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 ++规范不允许这样做,但大多数编译器仍然允许它,最终他们更改了文档以反映编译器中实际发生的情况。