C#中派生类调用基类构造函数用法分析
这里的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数
1、当基类中没有自己编写构造函数时,派生类默认的调用基类的默认构造函数
例如:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public class MyBaseClass{}public class MyDerivedClass : MyBaseClass{ public MyDerivedClass() { Console.WriteLine("我是子类无参构造函数"); } public MyDerivedClass(int i) { Console.WriteLine("我是子类带一个参数的构造函数"); } public MyDerivedClass(int i, int j) { Console.WriteLine("我是子类带二个参数的构造函数"); }} |
此时实例化派生类时,调用基类默认构造函数
2、当基类中编写构造函数时,派生类没有指定调用构造哪个构造函数时,会寻找无参的构造函数,如果没有则报错,另外无论调用派生类中的哪个构造函数都是寻找无参的那个基类构造函数,而非参数匹配。
例如:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class MyBaseClass{ public MyBaseClass(int i) { Console.WriteLine("我是基类带一个参数的构造函数"); } } public class MyDerivedClass : MyBaseClass { public MyDerivedClass() { Console.WriteLine("我是子类无参构造函数"); } public MyDerivedClass(int i) { Console.WriteLine("我是子类带一个参数的构造函数"); } public MyDerivedClass(int i, int j) { Console.WriteLine("我是子类带二个参数的构造函数"); }} |
此时实例化派生类时则报错
3、基类中编写了构造函数,则派生类中可以指定调用基类的某个构造函数,使用base关键字。
例如
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class MyBaseClass{ public MyBaseClass(int i) { Console.WriteLine("我是基类带一个参数的构造函数"); }}public class MyDerivedClass : MyBaseClass{ public MyDerivedClass() : base(i) { Console.WriteLine("我是子类无参构造函数"); } public MyDerivedClass(int i) : base(i) { Console.WriteLine("我是子类带一个参数的构造函数"); } public MyDerivedClass(int i, int j) : base(i) { Console.WriteLine("我是子类带二个参数的构造函数"); }} |
此时实例化派生类时使用的带一个参数的构造函数时,则不会报错,因为他指定了基类的构造函数。
4、如果基类中的构造函数不含有无参构造函数,那么派生类中的构造函数必须全部指定调用的基类构造函数,否则出错
例如
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class MyBaseClass { public MyBaseClass(int i) { Console.WriteLine("我是基类带一个参数的构造函数"); } } public class MyDerivedClass : MyBaseClass { public MyDerivedClass() { Console.WriteLine("我是子类无参构造函数"); } public MyDerivedClass(int i) : base(i) { Console.WriteLine("我是子类带一个参数的构造函数"); } public MyDerivedClass(int i, int j) { Console.WriteLine("我是子类带二个参数的构造函数"); }} |
此时编译将不能通过
希望本文所述对大家的C#程序设计有所帮助。
C#中派生类调用基类构造函数用法分析的更多相关文章
- 转 关于C#中派生类调用基类构造函数的理解
关于C#中派生类调用基类构造函数的理解 .c#class 本文中的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1. 当基类中没有自己编写构造函数时,派生类默认的调用 ...
- 关于C#中派生类调用基类构造函数的理解
(1)当基类中没有自己编写的构造函数时,派生类默认条用基类的构造函数 (2)当基类中有自己编写的构造函数时,要在基类中添加无参的构造函数 public class MyBaseClass { publ ...
- C#在派生类中调用基类成员
一.在派生类中调用基类成员 在C#的派生类中,我们可以使用base关键字调用基类中的公有或者受保护成员.这些成员只能是构造函数.实例方法或者实例属性. base关键字调用基类成员的语法格式如下: ba ...
- 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换
一.不能自动继承的成员函数 构造函数 析构函数 =运算符 二.继承与构造函数 基类的构造函数不被继承,派生类中需要声明自己的构造函数. 声明构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类 ...
- C++_派生类的构造函数及派生类和基类之间的特殊关系
派生类和基类的概念及派生类构造函数的原理: 创建一个叫做TableTennisPlayer的基类,记录会员的名字和是否有球桌. //声明一个基类 class TableTennisPlayer { p ...
- C++中派生类使用基类成员的问题
在C++中,派生类在定义构造函数时,会调用基类构造函数首先完成基类部分的构造: class Derive : public Base { public: Derive(string nam, int ...
- 正确理解Widget::Widget(QWidget *parent) :QWidget(parent)这句话(初始化列表中无法直接初始化基类的数据成员,所以你需要在列表中指定基类的构造函数)
最近有点忙,先发一篇我公众号的文章,以下是原文. /********原文********/ 最近很多学习Qt的小伙伴在我的微信公众号私信我,该如何理解下面段代码的第二行QWidget(parent) ...
- 关于MFC中重载函数是否调用基类相对应函数的问题
在重载CDialog的OnInitDialog()函数的时候,在首行会添加一句:CDialongEx::OnInitDialog();语句,这是为什么呢?什么时候添加,什么时候不添加? 实际上,我们在 ...
- c++中派生类对基类成员的三种访问规则(转)
C++中派生类对基类成员的访问形式主要有以下两种:1.内部访问:由派生类中新增成员对基类继承来的成员的访问.2.对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问.今天给大家介绍在3中 ...
随机推荐
- BZOJ4012 [HNOI2015]开店
Description 风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到 人生哲学.最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点钱.这样的 想法当然非常好啦,但是她们也发现 ...
- 搭建你的第一个Django应用程序
首先你要确保你机器上面安装了python:Python开发_python的安装 python的相关学习资料:http://www.cnblogs.com/hongten/tag/python/ 其次, ...
- ssky-keygen + ssh-copy-id 无密码登陆远程LINUX主机
ssky-keygen + ssh-copy-id 无密码登陆远程LINUX主机 使用下例中ssky-keygen和ssh-copy-id,仅需通过3个步骤的简单设置而无需输入密码就能登录远程Linu ...
- java语言中一些使用的小技巧(区别于c++)
正在自学java中...想记录下java和c++在一些小的方面的不同点.(未完待续...) java中class的对象均是引用类型的,如果想把连个同类型的对象相关联起来,只要将一个赋值给另一个就可以了 ...
- Yii2 Format 如何使用
$formatter = \Yii::$app->formatter; // output: January 1, 2014 echo $formatter->asDate('2014-0 ...
- 使用Eclipse开发Java Web过程中Debug调试的使用方法
里介绍的是在Eclipse中的Debug调试. 首先右击项目选择Debug As -- Debug on Server 或者点击Server面板的小昆虫图标,启动Debug模式. 运行web项目,进行 ...
- mobile cpu上禁用alpha test的相关总结
因为,每家芯片的特性不同,根据向framebuffer写法的不同,分为tile-based的mobile cpu,如ImgTec PowerVR,ARM Mali,一部分老版本Qualcomm ...
- SQL--查询相同字段的数据
select city, statefrom state_county_citywhere city in (select city from state_county_city group by c ...
- Nobel Lecture, December 12, 1929 Thermionic phenomena and the laws which govern them
http://www.nobelprize.org/nobel_prizes/physics/laureates/1928/richardson-lecture.pdf OWEN W. RICHARD ...
- ArcGIS Server发布服务,报错001270
错误001270 这个问题一般是因为数据源文件太大导致. 解决办法: 对于001270的错误,官方帮助中给出了一些可能的原因并提供了相应的解决办法(http://resources.arcgis.c ...