为什么我的私人可以访问?

Ian*_*Ian 4 .net c# oop

我有以下代码:

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?xprivate

Dan*_*rth 11

它是可访问的,因为你是它所定义的类!

访问修饰符适用于类,而不适用于类的实例.这意味着,A类的实例可以访问另一个A类实例的所有私有成员.

我认为,你同意我的意见,这是可以的:

var p = this._person;
Run Code Online (Sandbox Code Playgroud)

但是这个怎么样:

public void DoSomething(PersonInitializer personInitializer)
{
    var p = personInitializer._person;
}
Run Code Online (Sandbox Code Playgroud)

根据您的假设,此代码将根据输入有效.
例:

DoSomething(this); // ok
DoSomething(other); // not ok
Run Code Online (Sandbox Code Playgroud)

这毫无意义:-)