首先说明下 之所以用 双引号 是因为构造函数是没有继承的

派生类默认会调用基类的无参数构造函数

比如: 

  public class A         {

public A()         {

Console.WriteLine("A");

}

public A(string name)         {

Console.WriteLine("A Name:{0}", name);

}

}

public class B : A     {

public B()         {

Console.WriteLine("B");

}

public B(string name)         {

Console.WriteLine("B Name:{0}", name);

}

}

class Program

{

  static void Main(string[] args)

  {

    B b = new B();
            B b1 = new B("张三");
            Console.ReadKey();

  }

}

输出的结果为:

说明不管调用派生类的哪个构造函数,默认都先调用基类的无参数构造函数

之所以标题中用 "继承" 是因为构造函数之间的调用也是用 ":",下面就在派生类里面调用一下基类的构造函数

class Program     {

   static void Main(string[] args)

   {

    B b = new B();

     Console.ReadKey();

  }

}

public class B : A     {

public B():base("B->A")         {

Console.WriteLine("B");

}

public B(string name)         {

Console.WriteLine("B Name:{0}", name);

}

}

输出结构为:

由结果可以看出,当给B的构造函数手动指派要调用的基类带参数的构造函数后,将不再执行基类的无参数构造函数

下面写下在同一个类中构造函数的调用

class Program     {

   static void Main(string[] args)

   {

    B b = new B();

     Console.ReadKey();

  }

}

public class B : A     {

public B():this("无惨->带参")         {

Console.WriteLine("B");

}

public B(string name):this(true)         {

Console.WriteLine("B Name:{0}", name);

}

  public B(bool b)         {

     Console.WriteLine("B bool:{0}", b);         }

  }

输出结果:

为了看一下调用的先后关系就又加了一个bool参数的构造函数,由结果可以看出如果构造函数调用了另一个构造函数,例如:

public B():this("无惨->带参")

执行顺序是从后向前依次执行的

C#构造函数的 "继承" 问题的更多相关文章

  1. javascript面向对象(三):非构造函数的继承

    本文来自阮一峰 这个系列的第一部分介绍了"封装",第二部分介绍了使用构造函数实现"继承". 今天是最后一个部分,介绍不使用构造函数实现"继承" ...

  2. javascript面向对象(二):构造函数的继承

    本文来自阮一峰 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承"的五种方法. 比如,现在有 ...

  3. Javascript面向对象编程(三) --- 非构造函数的继承

    一.什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人". var Chinese = { nation:'中国' }; 还有一个对象,叫做&qu ...

  4. Java构造函数的继承问题

    ◎构造函数的继承 1.子类只继承父类的默认(缺省)构造函数,即无形参构造函数.如果父类没有默认构造函数,那子类不能从父类继承到任何构造函数. 3.在创建对象时,先调用父类默认构造函数对对象进行初始化, ...

  5. 转载:javascript面向对象编程:非构造函数的继承

    一.什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人". var Chinese = { nation:'中国' }; 还有一个对象,叫做&qu ...

  6. Javascript面向对象编程(三):非构造函数的继承 by 阮一峰

    今天是最后一个部分,介绍不使用构造函数实现"继承". 一.什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人". var Ch ...

  7. (转)Javascript面向对象编程(三):非构造函数的继承(作者:阮一峰)

    不使用构造函数实现"继承". 一.什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人". var Chinese = { na ...

  8. JS继承,原型继承,构造函数的继承,非构造函数"的继承

    a.原型继承 一.new运算符的缺点 用构造函数生成实例对象,有一个缺点,那就是无法共享属性和方法.比如,在DOG对象的构造函数中,设置一个实例对象的共有属性species. function DOG ...

  9. JavaScript构造函数+原型创建对象,原型链+借用构造函数模式继承父类练习

    虽然经常说是做前端开发的,但常常使用的技术反而是JQuery比较多一点.在JavaScript的使用上相对而言少些.尤其是在创建对象使用原型链继承上面,在项目开发中很少用到.所以今天做个demo练习一 ...

  10. Javascript面向对象编程(二):构造函数的继承

    这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承"的五种方法. 比如,现在有一个" ...

随机推荐

  1. python 下的数据结构与算法---3:python内建数据结构的方法及其时间复杂度

    目录 一:python内部数据类型分类 二:各数据结构 一:python内部数据类型分类 这里有个很重要的东西要先提醒注意一下:原子性数据类型和非原子性数据类型的区别 Python内部数据从某种形式上 ...

  2. js 判断微信浏览器(转)

    最近做很多HTML5的项目,很多页面会通过微信微博等SNS分享出去.在分享页面上提供公司APP的下载.但是在很多应用的浏览器中,点击下载链接无法下载应用.那么针对这些浏览器我们需要给用户提示从safa ...

  3. 使用Alcatraz为Xcode安装XActivatePowerMode插件, 从此敲代码逼格大大滴~

    Alcatraz 是一款 Xcode的插件管理工具,可以用来管理XCode的 插件.模版以及颜色配置的工具. 关于Alcatraz的安装,这里有一篇不错的博文,请参考安装:http://www.cnb ...

  4. Swift中扩展的使用

    import Foundation /* 扩展 1.使用扩展添加属性, 方法, 可变方法, 构造器, 下标, 嵌套类型 2.可以使一个已有类型符合一个或者多个协议 3.扩展与OC的Category类似 ...

  5. jQuery操作元素

    通常,我们在创建元素时,会使用以下代码: var p = document.createElement("p"); p.innerText = "this is para ...

  6. HC-05蓝牙模块基本使用

    1.进入AT模式 EN输入高电平+按住按键不放,然后上电,进入AT模式,不过AT指令只能输入一次,下次再输入AT需要重新进入 2.串口波特率设为38400,进行AT模式下的指令操作 3.基本AT指令 ...

  7. 《APUE》读书笔记第十三章-守护进程

    守护进程 守护进程是生存期较长的一种进程,它们常常在系统自举时启动,仅在系统关闭时才终止.因为它们没有控制终端,所以说它们是在后台运行的.UNIX系统由很多守护进程,它们执行日常事务活动. 本章主要介 ...

  8. Java系列--第六篇 基于Maven的SSME之多国语言实现

    如果你的网站足够强大,以致冲出了国门,走向了国际的话,你就需要考虑做多国语言了,不过,未雨绸缪,向来是我辈程序人员的优秀品质,谁知道那天,我们的网站被国外大公司看中收购,从而飞上枝头变凤凰.不扯这么多 ...

  9. DataTables列过滤器

    var table = $('#example').DataTable(); table.columns().flatten().each( function ( colIdx ) { // Crea ...

  10. 编译cwm-recovery(含部分修改步骤)[转]

    1. 同步cm10.1的源码,具体操作请百度之-- 2. 打开终端,到源码目录下: cd Android/cm10.1                   //我的源码目录 3. 如果不想使用cm10 ...