可从同一类的另一个实例访问的私有字段

时间:2011-12-19 19:19:50

标签: c# delegates field

我没有得到以下内容..我一直以为我只能从声明该字段的类访问私有字段。但是在这种情况下我能够访问它:

class Session
{
    List<client> ListOfClients = new List<client>();

    public void IterateClients(Action<client> action)
    {

    }
}

class client
{
    private int A;

    Session area;

    public void SendData()
    {
        area.IterateClients(delegate(client c)
        {
            c.A = 5; //how come this is accessible?
        });
    }
}

5 个答案:

答案 0 :(得分:5)

这就是它的工作方式。

您的理解不正确;私人成员不仅限于this限定符。

答案 1 :(得分:5)

您只能从其所属的CLASS访问私人数据。同一类的两个对象可以访问彼此的私有部分。

法律:

class c1
{
        private int A;

        public void test(c1 c)
        {
        c.A = 5;

        }

}

非法:

class c2
{
  public void test(c1 c)
  {
     c.A = 5;
  }
}

答案 2 :(得分:1)

您在班级client内有一个方法。在此方法中,您可以调用类Session的方法。在此调用中,您有一个委托(一种“回调”),此委托在类client的上下文中运行,因此可以访问私有成员A

答案 3 :(得分:0)

你是对的

  

我只能从

中声明字段的类访问私有字段

所以你要从声明私有变量的类中访问私有字段。这在Java中也是允许的。

答案 4 :(得分:0)

从技术上讲,不是Session类正在访问私有A变量,它是在SendData()中创建的委托函数。这没有问题。可以认为它是IterateClients只是从client类调用方法,该方法可以访问A变量,因为它位于同一个类中。