在 C # (和许多其他语言)中,访问同一类型的其他实例的私有字段是完全合法的。例如:
public class Foo
{
private bool aBool;
public void DoBar(Foo anotherFoo)
{
if (anotherFoo.aBool) ...
}
}
正如 C # 规范(3.5.1,3.5.2节)所述,对私有字段的访问是在一个类型上,而不是在一个实例上。我一直在和一个同事讨论这个问题,我们正试图找出为什么它是这样工作的原因(而不是限制对同一个实例的访问)。
我们能够提供的最佳参数是相等性检查,类可能希望访问私有字段以确定与另一个实例的相等性。还有其他原因吗?或者一些黄金理由,绝对意味着它必须像这样工作,否则某些事情将是完全不可能的?