博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 关于C#中派生类调用基类构造函数的理解
阅读量:6675 次
发布时间:2019-06-25

本文共 1074 字,大约阅读时间需要 3 分钟。

1、 当基类中没有自己编写构造函数时,派生类默认的调用基类的默认构造函数

在这里插入图片描述
在这里插入图片描述
2、 当基类中编写构造函数时,派生类没有指定调用构造哪个构造函数时,会寻找无参的构造函数,如果没有则报错,另外无论调用派生类中的哪个构造函数都是寻找无参的那个基类构造函数,而非参数匹配。

在这里插入图片描述

3、 基类中编写了构造函数,则派生类中可以指定调用基类的某个构造函数,使用base关键字。

在这里插入图片描述

在这里插入图片描述

派生类构造函数执行顺序

针对派生类,创建对象的基类部分过程中会隐式调用基类的某一个构造函数作为创建实例过程的一部分,在继承层次链中的每个类在创建对象过程中,执行自己的构造函数体之前都要执行它的基类构造函数。

也就是说,如果派生类的基类也是派生类,则每个派生类只需负责其直接基类的构造,不负责简介基类的构造,并且实例构造函数的顺序是从最上面的基类开始下溯的,静态构造函数是从下面的类开始上溯的(下面代码解释了这个问题)。

注意,在构造函数中要避免调用虚函数方法。在执行基类构造函数是,在执行派生类的构造函数方法体,基类的虚方法会调用派生类的覆写方法,因此调用会在派生类没有完全初始化之前传递到派生类。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

二、构造函数初始化语句
一般情况下在实例化派生类对象的时候都会调用基类的无参数构造函数,但是构造函数是可以重载的,所以基类可能有多个构造函数。我们在显示的创建有参数构造函数的时候,这样系统就不会自动创建默认无参数构造函数,所以我们在创建有参数构造函数的时候,要同时再显示创建一个无参数的和默认形式相同的构造函数,这样设计才是优雅的设计。

当声明一个不带构造函数初始化语句的构造函数时,其实是省略了base()构造函数初始化语句,如下两个形式是等价的:

/* 等价的构造函数初始化语句 */  class DrivedClass : BaseClass {DrivedClass()                //隐式使用基类构造函数BaseClass()的构造函数{    ...} }  class DrivedClass : BaseClass{DrivedClass() : base()      //显示使用基类构造函数BaseClass()的构造函数{    ...}}

如果想要派生类使用指定的基类构造函数然不是默认的无参数构造函数,可以使用“构造函数初始化语句”来进行指定。可以从以下两个形式:

  1. 使用关键字base并指明使用哪一个基类构造函数

  2. 作用:使用base()指明使用基类的哪一个构造函数;

  3. 用法:使用有关键字base的构造函数初始化语句和要调用的基类构造函数参数列表

在这里插入图片描述

转载地址:http://fdrxo.baihongyu.com/

你可能感兴趣的文章
maven编译时出现There are test failures
查看>>
SpringBoot | 第三十一章:MongoDB的集成和使用
查看>>
网络学习笔记2
查看>>
JPA--多对多关系
查看>>
配置sharepoint 2010错误:Microsoft.SharePoint.Upgrad...
查看>>
Windows04.CMap
查看>>
UUID 生成算法JS版
查看>>
JAVA中,Map转实体类、实体类转Map的方法
查看>>
判断dubbo接口是否正常
查看>>
100-19
查看>>
获取n!的末尾有多少个0?
查看>>
设计模式之工厂模式
查看>>
度量平台角色的含义及运用
查看>>
前嗅ForeSpider教程:创建模板
查看>>
JAVA 排序 冒泡法
查看>>
Nginx安装和常用配置文档
查看>>
oracle数据库控制文件Control files
查看>>
docker常用网络模型:
查看>>
zTree模糊查询节点并且隐藏节点
查看>>
K3CLOUD自动备份Oracle数据库并删除指定天数前的备份
查看>>