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

本文关键字:实例 另一个 访问 字段 一类 | 更新日期: 2023-09-27 18:18:14

我没有得到以下内容,我一直认为我只能从声明字段的类中访问私有字段。然而,在这种情况下,我能够访问它:

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?
        });
    }
}

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

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

法律:

class c1
{
        private int A;
        public void test(c1 c)
        {
        c.A = 5;
        }
}
非法:

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

应该是这样的

你的理解是错误的;private成员不限于this限定符

你是对的

我只能从在

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

表示你访问的是声明私有变量的类的私有字段。

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

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