A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

C#中子类显示调用父类中的构造函数有什么作用?(有代码参考)一下是我写了一个子类调用父类构造函数的代码,我一直想不明白,子类调用父类中的构造函数有什么有用?既然子类已经继承了父类 那么在调用父类中的构造函数对父类进行初始化有什么意义啊?-----------》纠结中??(没分了!大家多担待啊!谢谢大家了啊!!)

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

8 个回复

倒序浏览
因为子类继承父类以后,父类的所有非private的成员子类也就有了,所以初始化子类的时候,必须先实例化父类成员,实例完后,CLR把调用控制权交给子类构造函数,然后实例子类,这是一个层层调用的过程!先找到最低层的然后一层层调用一直到子类

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
刘逍遥 发表于 2012-6-23 22:52
因为子类继承父类以后,父类的所有非private的成员子类也就有了,所以初始化子类的时候,必须先实例化父类 ...

能再说的明白一点吗  怎么要初始化父类   能把你想说的执行的机制画个简图吗
回复 使用道具 举报
在子类函数进行初始化时,父类的构造函数也会运行.
父类中的数据,子类可以直接获取,所以子类对象在建立时,首先需要查看父类中是如何对这些数据进行初始化的。  因此子类创建对象时需要访问父类的构造函数。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
其实这里不是很难理解的,好比人和中国人,在有中国人之前必定要有人,没有人那就不可能存在中国人。所以想使用子类就一定要找到对应的父类,初始化父类的数据,子类才可以调用。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
子类继承了父类,父类的那些成员当然也属于子类的成员了,初始化子类的时候,当然就要初始其全部成员(虽然有的可能是默认值),子类的构造函数(不包括:base(...))仅仅初始化该子类中新定义的成员,所以需要:base(...)对父类进行初始化,不显式的写出来也可以,只要父类中有默认构造函数。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
谈谈个人理解,仅供探讨,如有不对,请指正;
继承只是一个专用名词,说明了子类和父类的关系,两个字不能更深层次的说明什么;
子类和父类是单个的个体,没有包含关系;
子类继承了父类,更直接的说法就是子类可以访问父类的非私有成员;
个人认为,c#语言的设计者通过做继承,为 多态提供了条件,有了多态,变化无穷;
底层实现应该是按先建父类,在建子类的这种方式去走的;

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
在C#中类的继承遵循的规则之一是派生类自然继承基类的成员,但不能继承基类的构造函数成员。但派生类的基类部分成员仍由基类的构造函数完成初始化,所以,创建派生类对象时,会多次调用构造函数。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
子类继承了父类,就相当于拥有了父类的一些属性和方法,但是子类中其实根本没有写这些属性和方法。
所以初始化子类是就需要先初始化父类,再初始化你在子类中写的属性和方法,这样才能使用父类的属性和方法

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马