C#构造函数在基类和父类中的执行顺序
作者:農碼一生 发布时间:2021-10-24 06:58:03
标签:C#,构造,函数,执行,顺序
一、简介
当我们没有在子类构造函数中写上 base(),默认会先调用父类中无参的构造函数,再调用子类。
当在有参构造函数后写上base时,只调用子类构造函数中有参的构造函数,隐藏父类无参构造函数。
二、代码案例
父类代码:
#region 父类
/// <summary>
/// 测试构造函数——需要被构造类 Fu
/// </summary>
class Fu
{
private int x;//一个简单的私有字段
/// <summary>
/// 构造函数
/// </summary>
public Fu()
{
Console.WriteLine("会先调用这里:这是父类");
}
/// <summary>
/// 父类中的有参构造方法
/// </summary>
/// <param name="x"></param>
public Fu(int x)
{
this.x = x;
Console.WriteLine("x赋值完成");
}
/// <summary>
/// 父类构造C函数
/// </summary>
/// <param name="x"></param>
/// <param name="b"></param>
/// <param name="c"></param>
public Fu(int x, int b, string c)
{
this.x = x;
Console.WriteLine("x赋值完成" + x + b + c);
}
/// <summary>
/// 具有7个参数的构造函数
/// </summary>
/// <param name="a"></param>
/// <param name="a1"></param>
/// <param name="a2"></param>
/// <param name="a3"></param>
/// <param name="a4"></param>
/// <param name="a6"></param>
/// <param name="a5"></param>
public Fu(int a, int a1, int a2, int a3, int a4, int a6, int a5)
{
Console.WriteLine("最长参数构造运行");
Console.WriteLine(a + "|" + a1 + "|" + a2 + "|" + a3 + "|" + a4 + "|" + a5 + "|" + a6 + "|"); //在函数中让传入参数对Fu类对象进行初始化
//例如有如下多个私有字段,在类对象初始化的时候,对其变量初始化。用构造函数最为简单
this.a = a; //传入参数,在对象实例化后,对其私有变量进行赋值操作
this.a1 = a;
this.a2 = a;
this.a3 = a;
this.a4 = a;
this.a5 = a;
this.a6 = a;
}
private int a;
private int a1;
private int a2;
private int a3;
private int a4;
private int a5;
private int a6;
}
#endregion
子类代码:
#region 子类
/// <summary>
/// 派生类继承父类
/// </summary>
class Derived : Fu
{
/// <summary>
/// 会先调用父类的构造函数,然后再调用子类这边的有参构造函数
/// </summary>
//先调用父类无参,再调用子类无参
//当我们没有在子类构造函数中写上 base(),默认会先调用父类中无参的构造函数,再调用子类。
public Derived() //: base() //重新构造 :调用父类中无参的构造函数,在这里写不写调用结果一致
{
Console.WriteLine("这是派生类-无参-构造函数");
}
private int y;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// 当我们没有在子类构造函数中 写上 base(),默认会先调用父类中无参的构造函数
/// 当在有参构造函数后写上base时,只调用子类构造函数中有参的构造函数,隐藏父类无参构造函数
public Derived(int x, int y) /*: base(x)*/
{
this.y = y;
Console.WriteLine("这是y赋值完成");
}
/// <summary>
/// 多参数
/// </summary>
/// <param name="x"></param>
/// <param name="a"></param>
public Derived(int x, string a)// : base(x, x, x, x, x, x, x) //这里写了 base 会先调用父类,再调用当前子类进行构造
{
y = x;
Console.WriteLine(a + "第三方法");
}
}
#endregion
Main()调用:
#region Main 入口
/// <summary>
/// 程序
/// </summary>
class Program
{
/// <summary>
/// 主入口
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
Derived d = new Derived();
Console.WriteLine("-----------------------以上为无参构造------------------------------------------");
Derived d1 = new Derived(1, 2);
Console.WriteLine("-----------------------以上为2个参数构造---------------------------------------");
Derived d2 = new Derived(1, "1");
Console.WriteLine("-----------------------以上为2个参数构造,6个私变量----------------------------");
//先调用有参的构造函数一旦被调用,无参的构造函数都不会被调用了
//先执行父类的构造函数,才执行子类的
Console.ReadLine();
}
}
#endregion
三、输出结果
会先调用这里:这是父类
这是派生类-无参-构造函数
-----------------------以上为无参构造------------------------------------------
会先调用这里:这是父类
这是y赋值完成
-----------------------以上为2个参数构造---------------------------------------
最长参数构造运行
1|1|1|1|1|1|1|
1第三方法
-----------------------以上为2个参数构造,6个私变量----------------------------
来源:https://www.cnblogs.com/wml-it/p/14798157.html


猜你喜欢
- 在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。Throwable 指定代码中可用异常传播机制通过 Java
- 本文介绍idea的安装和基本使用首先保证JDK正常安装及配置下载地址:https://www.jetbrains.com/idea/down
- Android studio Run with --stacktrace option to get the stack tra
- 在项目开发中某些场景必须要用到启动项目后立即执行方式的功能,如我们需要去初始化数据到redis缓存,或者启动后读取相应的字典配置等,这篇文章
- 配置绑定所谓配置绑定”就是把配置文件中的值与 JavaBean 中对应的属性进行绑定。通常,我们会把一些配置信息(例如,
- TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路。一旦建立了虚拟的网络链
- 本文实例讲述了C# winform实现右下角弹出窗口结果的方法。分享给大家供大家参考,具体如下:using System.Runtime.I
- java 中死锁问题的实例详解先看代码在做解释public class DeadLock implements Runnable{ &nbs
- 现在项目中有使用到音视频相关技术,在参考了网上各种大牛的资料及根据自己项目实际情况(兼容安卓6.0以上版本动态权限管理等),把声音录制及播放
- 直接上代码吧。昨晚腾讯在线测试遇到的题。螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如
- 工厂模式工厂模式顾名思义就是生产实例的工厂,使用工厂模式不会在程序中使用new关键字创建实例。而是将创建对象的细节隐藏,对外提供统一的方法,
- C# 连接海康威视/// <summary> /// 海康威视SDK ///
- 验证码功能在各大网站都能用到,下面小编通过实例代码给大家分享Android 获取随机验证码功能,具体代码如下所示: package cn.h
- 1 常量定义在程序中存在大量的数据来代表程序的状态,其中有些数据在程序运行过程中值不能发生改变,这些数据在程序中被叫做常量。2 常量语法命名
- 一、匿名结构体struct{ char name[20]; int age;}s1;匿名
- 1. 新建项目引入web和security包完整的pom.xml文件如下<?xml version="1.0" e
- 目录SpringBoot整合OpenApiOpenAPI依赖编写配置类改造优化OpenAPI常用注解介绍实体类controller类演示网上
- HttpWebRequest 是一个Http 请求类,继承于 WebRequest。WebRequest 是一个抽象类,能够对统一资源标识符
- 本文实例为大家分享了安装和配置maven环境的具体步骤,供大家参考,具体内容如下下载maven:1.进入官网下载:http://maven.
- 前端采用layui框架,讲解多文件上传的完整实现功能。前端html重点代码如下:<div class="layui-form