为什么我的私人可以访问?
我有以下代码:
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类实例的所有私有成员。
我认为,你同意我的意见,这是可以的:
var p = this._person;
但是这个怎么样:
public void DoSomething(PersonInitializer personInitializer) { var p = personInitializer._person; }
根据您的假设,此代码将根据输入有效。
例:
DoSomething(this); // ok DoSomething(other); // not ok
这毫无意义:-)
从文档 :
私有成员只能在类的主体或声明它们的结构体中访问。
由于LoadFromFile
位于声明_person
的类的主体内,因此它可以访问它。 从那以后,你无能为力
私有访问是最不宽容的访问级别。
私有变量/引用只能在定义它们的类中访问。
既然在你的情况下,引用Person _person;
在您访问它的同一个类中定义,它是可访问的。
在C#(和Jave,C ++)中,字段的范围基于类,因此该类的所有实例都可以访问同一类的其他实例的私有成员。
在像Eiffel (和Smalltalk)这样的语言中,字段的范围基于实例 ,因此私有字段只能由同一实例访问 。 Eiffel方法可能更好,但C ++赢得了大多数程序员的心,因此很少有人质疑“基于类的范围”
上述就是C#学习教程:为什么我的私人可以访问?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/991106.html