c# - 为什么我的隐私可以访问?

标签 c# .net 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)
    {

    }
}

为什么 _person 可以从 x 访问,即使它是 private?我能做些什么来“保护”_person?

最佳答案

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

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

我假设,你同意我的看法,这是可以的:

var p = this._person;

但是这个呢:

public void DoSomething(PersonInitializer personInitializer)
{
    var p = personInitializer._person;
}

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

DoSomething(this); // ok
DoSomething(other); // not ok

这没有意义:-)

关于c# - 为什么我的隐私可以访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5244997/

相关文章:

c# - 在C#中,你如何称呼数组引入的那种多态性?

c++ - C++ 中有没有办法将给定类的函数限制为仅另一个类(不使用继承, friend )?

C# .NET 4.0 测试框架?

c# - 无法解析格式为 2013-09-17T05 :15:27. 947 的日期字符串

c# - 在什么情况下 `RealProxy.GetTransparentProxy()` 会返回 `null` ?

c# - 当从另一个线程修改对象属性时引发 OnPropertyChanged

python - 初学者 : python namespace collision?

c# - 使用 File.Create 和 Delete 进行单元测试,但出现 "file used by other process"异常

c# - 将 FileInfo 数组转换为字符串数组 C#

c# - 确定 html 节点的样式