我可以访问内部类中的外部类对象

Sha*_*pta 19 c# oop delegates class event-handling

我有三个这样的课程.

class A
{
    public class innerB
       {
       //Do something
       }

    public class innerC
       {
        //trying to access objB here directly or indirectly over here. 
        //I dont have to create an object of innerB, but to access the object created by A
        //i.e.
             innerB objInnerB = objB;
        //not like this
             innerB objInnerB= new innerB();
       }

private innerB objB{get;set;}  **//Private**

public A()
   {
    objB= new innerB();
   }
}
Run Code Online (Sandbox Code Playgroud)

我想访问由类A创建的类C中的类B的对象.是否有可能以某种方式对类C中的类A的对象进行更改.我可以通过创建事件或无论如何获得A类的对象.

编辑:我在提出上述问题时的错误.在A中创建的B的对象是私有的而不是公共的

通过创造事件是否可能做到这一点

无论如何,我能够提出一个可以由A类处理的事件,那么我的问题就可以解决了.

And*_*son 22

如果我正确地读你,你想在innerC中访问类A的objB属性而不传递它.

这不是C#内部类的工作方式,如本文所述: C#嵌套类类似于C++嵌套类,而不是Java内部类

如果你想从innerC访问A.objB那么你将不得不以某种方式将类A传递给innerC.

  • 您需要传入父级(因为没有`outer`关键字),但内部类**可以访问父级的私有成员. (15认同)
  • "嵌套类型可以访问包含类型的私有和受保护成员,包括任何继承的私有或受保护成员." 嵌套类型在外部私有成员的定义范围内,因此可以访问它们.请参阅[此MSDN文章](http://msdn.microsoft.com/en-us/library/ms173120(v = vs.110).aspx) (9认同)
  • 询问C#编译器:[示例代码](http://pastebin.com/HwA6F2Ee). (2认同)

dlr*_*as2 9

你需要传递的参考OuterClassInnerClass,也许是在构造函数中,如:

public class OuterClass
{
    //OuterClass methods

    public class InnerClass
    {
        private OuterClass _outer;

        public InnerClass(OuterClass outer)
        {
            _outer = outer;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以在所有InnerClass方法中使用该引用.