在C#(以及许多其他语言)中,访问相同类型的其他实例的私有字段是完全合法的.例如:
public class Foo
{
private bool aBool;
public void DoBar(Foo anotherFoo)
{
if (anotherFoo.aBool) ...
}
}
Run Code Online (Sandbox Code Playgroud)
由于C#规范(第3.5.1,3.5.2节)规定对私有字段的访问属于类型,而不是实例.我一直在与同事讨论这个问题,我们试图找出它之所以如此工作的原因(而不是限制对同一个实例的访问).
我们可以提出的最佳参数是进行相等性检查,其中类可能希望访问私有字段以确定与另一个实例的相等性.还有其他原因吗?或者一些绝对意味着它必须像这样或某种东西工作的黄金理由是完全不可能的?
我有以下代码:
public class PersonInitializer
{
private Person _person;
public static Person LoadFromFile(string path)
{
PersonInitializer x = new PersonInitializer();
Person p = x._person; //Why am I accessible?
return x.LoadFromFile(); //Sure.
}
public Person LoadFromFile(string path)
{
}
}
Run Code Online (Sandbox Code Playgroud)
为什么_ 即使它person
可以访问?我该怎样做才能"保护"_person?x
private