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

C# 可从同一类的另一个实例访问的私有字段,c#,delegates,field,C#,Delegates,Field,我没有得到以下信息..我一直认为我只能从声明字段的类中访问私有字段。但是,在这种情况下,我可以访问它: class Session { List<client> ListOfClients = new List<client>(); public void IterateClients(Action<client> action) { } } class client { private int A; S

我没有得到以下信息..我一直认为我只能从声明字段的类中访问私有字段。但是,在这种情况下,我可以访问它:

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?
        });
    }
}
课堂会话
{
List ListofClient=新列表();
公共无效迭代器客户端(操作)
{
}
}
类客户端
{
私人INTA;
会议区;
public void SendData()
{
area.IterateClients(委托(客户端c)
{
c、 A=5;//这是怎么可以访问的?
});
}
}

这就是它的工作方式

你的理解是错误的;私人成员不限于此限定符。

你说得对

我只能从声明字段的类中访问私有字段


因此,您正在从声明私有变量的类访问私有字段。这在Java中也是允许的。

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

法律:

class c1
{
        private int A;

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

        }

}
非法:

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

在类
客户机
中有一个方法。在这个方法中,您可以调用class
Session
的方法。在这个调用中,您有一个委托(一种“回调”),这个委托在类
客户机
的上下文中运行,因此可以访问私有成员
a

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

调用
A
的代码位于
client
类中。问题是什么?确切地说,规范说私有/受保护的方法可以从类内部访问,而不是(实例化的)对象。可能只有我一个人,但我不认为特定类的一个对象可以访问同一类的另一个对象的私有字段(据我所知)。这是假设我们只是简单地访问私有字段而没有反射和其他东西。@Pako:这不是真的,正如这里的每个答案所说的。不,这没有考虑到代理。但是匿名代理在技术上是客户端的成员,所以它可以访问私有成员。哈,我每天都学到一些新东西。我从没想过那会有用。我接受我的错误,并将尽量不再犯:)谢谢你为我指出这一点。