首页 新闻 赞助 找找看

在类继承过程中父类private的成员到底有没有被子类继承?求解

0
悬赏园豆:10 [已解决问题] 解决于 2012-03-07 08:48

个人认为没有被子类继承,有人说其实继承了,只是不能使用

下面是帮助文档的解释,求高手详解

c#
FuSheng2012的主页 FuSheng2012 | 菜鸟二级 | 园豆:209
提问于:2012-02-24 12:39
< >
分享
最佳答案
0

我觉的没必要纠结于概念,如果是考试就说不能继承。

至于有人为什么会这么说我想是因为他认为当你创建子类的实例时父类的private字段也会被创建,所以从这个角度来说却是是被继承了。

鉴于楼上概念性的解释我给点通俗的吧,假设有两个类如下:

public class A
{
string name;
}
public class B:A
{
string name;
}


那么在实例化B的时候是不是只有name一个字段呢,不是的,还有一个A_Name也被实例化了而且也在B中,只不过你B的TypeHandle无法访问它,包括相对应的方法表也是。

收获园豆:5
today4king | 老鸟四级 |园豆:3499 | 2012-02-24 18:14

明白啦,实质是继承了,只是不能访问,对吧?

FuSheng2012 | 园豆:209 (菜鸟二级) | 2012-03-07 08:47
其他回答(3)
0

你的理解是不对的。参考C#语言规范4.0版第10.3.3节:一个类继承它的直接基类类型的成员。继承意味着一个类隐式地将它的直接基类类型的所有成员当作自已的成员,但基类的实例构造函数、析构函数和静态构造函数除外。

  • 实例构造函数、析构函数和静态构造函数是不可继承的,但所有其他成员是可继承的,无论它们所声明的可访问性(第 3.5 节)如何。但是,根据它们所声明的可访问性,有些继承成员在派生类中可能是无法访问的。
收获园豆:5
水牛刀刀 | 园豆:6350 (大侠五级) | 2012-02-24 13:01

我觉得这两条就是说内存中对象的字段是互相独立的,方法表是公用的。

嗯,第一次看到相应的语言规范,学习了。

支持(0) 反对(0) today4king | 园豆:3499 (老鸟四级) | 2012-02-24 18:20

哦,明白啦,是访问性的问题,其实是继承了,对吧?

支持(0) 反对(0) FuSheng2012 | 园豆:209 (菜鸟二级) | 2012-03-07 08:46
0

学习了。。。

KivenRo | 园豆:1734 (小虾三级) | 2012-02-25 10:39
0

当然继承了,只不过没有访问权限而已

Lukexywang | 园豆:178 (初学一级) | 2012-02-26 18:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册