C#中继承类为啥可以通过属性访问基类的私有字段。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中继承类为啥可以通过属性访问基类的私有字段。相关的知识,希望对你有一定的参考价值。

通常字段都是私有的,而属性都是公有的,公有派生后,派生类里没有派生私有成员。
但在派生类里调用本类中的属性时,属性里没有派生私有字段,为什么语法能通过。

根据查阅相关资料,得出以下结论
1:访问的其实不是基类私有字段!
以前学习的时候由于老师水平只广不深,(可不能怪老师,可能是某些教材误导了他),继承,会把基类的所有都继承过去,你可以理解成复制了一份,其实是包括私有字段的(子类会给他分配空间),(这里与广为流传的私有成员不能被继承的描述不服,也是最为误人,扭曲的一点!),继承后,你是不能直接访问自己的这个已继承的私有成员的,代码感知点它也不会出现,想要访问它,如果父类提供了能访问(父类的)它的公共或者保护方法,那么子类就可以通过这个方法来访问这个(自己的)私有字段,说起来很拗口,有空可以自己实验一下,如果错误,敬请指正,我最怕的就是武断过激的,或者朦朦胧胧的回答,很害人的!
参考技术A private 是共享级别比较低的修饰符,只能在本类中调用,属性的含义就是增加两个属性方法,对本类中私有成员进行读写,属性方法的修饰符是public,所有实例化或者继承于该类的成员都可以访问public对象。本回答被提问者和网友采纳 参考技术B 这个属性方法是公有的嘛.是间接的访问了基类的私有字段.所以可以. 参考技术C 那要看你把属性设置成什么样得了 public可以 如果是private也不能访问啊

以上是关于C#中继承类为啥可以通过属性访问基类的私有字段。的主要内容,如果未能解决你的问题,请参考以下文章

C++中继承类的构造函数

c#基础 继承和接口,扩展类型

C# 包含继承类的基类数组,访问非继承字段

继承对基类私有数据成员的访问(在派生类中继承基类成员函数)

C# 中base和this关键字

为啥 Type.GetFields() 不返回基类中的支持字段?