这里的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数

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#中派生类调用基类构造函数用法分析的更多相关文章

  1. 转 关于C#中派生类调用基类构造函数的理解

    关于C#中派生类调用基类构造函数的理解 .c#class       本文中的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1.  当基类中没有自己编写构造函数时,派生类默认的调用 ...

  2. 关于C#中派生类调用基类构造函数的理解

    (1)当基类中没有自己编写的构造函数时,派生类默认条用基类的构造函数 (2)当基类中有自己编写的构造函数时,要在基类中添加无参的构造函数 public class MyBaseClass { publ ...

  3. C#在派生类中调用基类成员

    一.在派生类中调用基类成员 在C#的派生类中,我们可以使用base关键字调用基类中的公有或者受保护成员.这些成员只能是构造函数.实例方法或者实例属性. base关键字调用基类成员的语法格式如下: ba ...

  4. 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换

    一.不能自动继承的成员函数 构造函数 析构函数 =运算符 二.继承与构造函数 基类的构造函数不被继承,派生类中需要声明自己的构造函数. 声明构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类 ...

  5. C++_派生类的构造函数及派生类和基类之间的特殊关系

    派生类和基类的概念及派生类构造函数的原理: 创建一个叫做TableTennisPlayer的基类,记录会员的名字和是否有球桌. //声明一个基类 class TableTennisPlayer { p ...

  6. C++中派生类使用基类成员的问题

    在C++中,派生类在定义构造函数时,会调用基类构造函数首先完成基类部分的构造: class Derive : public Base { public: Derive(string nam, int ...

  7. 正确理解Widget::Widget(QWidget *parent) :QWidget(parent)这句话(初始化列表中无法直接初始化基类的数据成员,所以你需要在列表中指定基类的构造函数)

    最近有点忙,先发一篇我公众号的文章,以下是原文. /********原文********/ 最近很多学习Qt的小伙伴在我的微信公众号私信我,该如何理解下面段代码的第二行QWidget(parent) ...

  8. 关于MFC中重载函数是否调用基类相对应函数的问题

    在重载CDialog的OnInitDialog()函数的时候,在首行会添加一句:CDialongEx::OnInitDialog();语句,这是为什么呢?什么时候添加,什么时候不添加? 实际上,我们在 ...

  9. c++中派生类对基类成员的三种访问规则(转)

    C++中派生类对基类成员的访问形式主要有以下两种:1.内部访问:由派生类中新增成员对基类继承来的成员的访问.2.对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问.今天给大家介绍在3中 ...

随机推荐

  1. Notepad++ Shortcuts 快捷键

    Ctrl-C   Copy Ctrl-X   Cut Ctrl-V   Paste Ctrl-Z   Undo Ctrl-Y   Redo Ctrl-A   Select All Ctrl-F   L ...

  2. html5文章 -- HTML5开发实例-网易微博手机Web App开发过程

    HTML5在国内外越来越受到互联网开发团队的青睐.国外,谷歌兴致勃勃地开发Chrome Web Store,微软发布了支持使用HTML5技术开发的“Irish Spring”主题网站,诺基亚斥巨资购得 ...

  3. SQLi filter evasion cheat sheet (MySQL)

    This week I presented my experiences in SQLi filter evasion techniques that I have gained during 3 y ...

  4. WPF 增加合计一栏

    占坑中  先抛个参考链接 http://stackoverflow.com/questions/678690/how-can-i-create-a-group-footer-in-a-wpf-list ...

  5. Bloomberg SEP 12.x 迁移小记

        备份 个文件: D:\Program Files\Symantec\Symantec Endpoint Protection Manager\Server Private Key Backup ...

  6. Objective-C中属性及其特质@property、attribute

    属性: 属性@property和属性attribute不同,@property在OC里有自己的一套专对实例变量的处理机制.attribute我们可以特指属性所具有或遵循的特质. 使用属性,编译器就会自 ...

  7. CSS2系列:BFC(块级格式化上下文)IFC(行级格式化上下文)

    BFC 块级格式化上下文,不好理解,我们暂且把她理解成"具有特殊的一类元素" 哪些元素会生成BFC? 根元素 float属性不为none position为absolute或fix ...

  8. Redis Sentinel哨兵集群

    Redis Sentinel(哨兵集群)是一种高可用的redis部署方案.在集群中的redis-master服务挂掉时,无需人为干预,即可通过哨兵集群的自我调整,实现redis服务的持续可用. 哨兵集 ...

  9. redmine问题

    问题1: 404 版本库中不存在该条目和(或)其修订版本. 1.1 GIT库: 参考:http://stackoverflow.com/questions/13000247/redmine-gitol ...

  10. PHP 错误与异常 笔记与总结(17 )像处理异常一样处理 PHP 错误

    有两种方式可以在 PHP 中以异常的方式处理错误: ① PHP 内置的 ErrorException类(也是 Exception 类的子类) <?php function exception_e ...