C#构造函数在基类和父类中的执行顺序
一、简介
当我们没有在子类构造函数中写上 base(),默认会先调用父类中无参的构造函数,再调用子类。
当在有参构造函数后写上base时,只调用子类构造函数中有参的构造函数,隐藏父类无参构造函数。
二、代码案例
父类代码:
#region 父类 ////// 测试构造函数——需要被构造类 Fu /// class Fu { private int x;//一个简单的私有字段 ////// 构造函数 /// public Fu() { Console.WriteLine("会先调用这里:这是父类"); } ////// 父类中的有参构造方法 /// /// public Fu(int x) { this.x = x; Console.WriteLine("x赋值完成"); } ////// 父类构造C函数 /// /// /// /// public Fu(int x, int b, string c) { this.x = x; Console.WriteLine("x赋值完成" + x + b + c); } ////// 具有7个参数的构造函数 /// /// /// /// /// /// /// /// 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 子类 ////// 派生类继承父类 /// class Derived : Fu { ////// 会先调用父类的构造函数,然后再调用子类这边的有参构造函数 /// //先调用父类无参,再调用子类无参 //当我们没有在子类构造函数中写上 base(),默认会先调用父类中无参的构造函数,再调用子类。 public Derived() //: base() //重新构造 :调用父类中无参的构造函数,在这里写不写调用结果一致 { Console.WriteLine("这是派生类-无参-构造函数"); } private int y; ////// 构造函数 /// /// /// /// 当我们没有在子类构造函数中 写上 base(),默认会先调用父类中无参的构造函数 /// 当在有参构造函数后写上base时,只调用子类构造函数中有参的构造函数,隐藏父类无参构造函数 public Derived(int x, int y) /*: base(x)*/ { this.y = y; Console.WriteLine("这是y赋值完成"); } ////// 多参数 /// /// /// public Derived(int x, string a)// : base(x, x, x, x, x, x, x) //这里写了 base 会先调用父类,再调用当前子类进行构造 { y = x; Console.WriteLine(a + "第三方法"); } } #endregion
Main()调用:
#region Main 入口 ////// 程序 /// class Program { ////// 主入口 /// /// 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个私变量----------------------------
到此这篇关于C#构造函数在基类和父类中执行顺序的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
上一篇:Parallel.For循环与普通for循环的性能比较
下一篇:C#构造函数详解
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?