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

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

Ex:

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、  当基类中编写构造函数时,派生类没有指定调用构造哪个构造函数时,会寻找无参的构造函数,如果没有则报错,另外无论调用派生类中的哪个构造函数都是寻找无参的那个基类构造函数,而非参数匹配。

Ex:

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关键字。

Ex

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、  如果基类中的构造函数不含有无参构造函数,那么派生类中的构造函数必须全部指定调用的基类构造函数,否则出错

Ex

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

  1. C#中派生类调用基类构造函数用法分析

    这里的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1.当基类中没有自己编写构造函数时,派生类默认的调用基类的默认构造函数例如: ? 1 2 3 4 5 6 7 8 9 10 11 ...

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

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

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

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

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

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

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

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

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

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

  7. c++ 派生类向基类转换的可访问性

    对于c++面向对象一直很疑惑,这次决定下功夫把它弄明白 一.派生类和基类之间的类型转换 首先理解,派生类含有基类的所有成分,只不过有些就算在派生类的成员函数也不能访问而已. (1)派生类和基类的自动转 ...

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

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

  9. c++——派生类和基类转换(类型兼容性原则)

    基类也叫父类,派生类也叫子类. 类之间的继承关系继承关系是类之间的父子关系. 继承关系的特点如下:A. 子类拥有父类的所有属性和行为B. 子类也是一种特殊的父类C. 子类对象可以当父类对象使用D. 子 ...

随机推荐

  1. Error initializing endpoint java.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í??

    2010-5-18 22:00:38 org.apache.catalina.core.AprLifecycleListener lifecycleEvent 信息: The Apache Tomca ...

  2. NSArray和NSDictionary的混合

  3. Andriod——区别DVM与JVM

    区别DVM与JVM 1.首要差别 Dalvik: 基于寄存器,编译和运行都会更快些 JVM: 基于栈, 编译和运行都会慢些 2.字节码的区别 Dalvik: 执行.dex格式的字节码,是对.class ...

  4. 关于java.lang.reflect.InvocationTargetException

    今天遇到java.lang.reflect.InvocationTargetException错误,卡了好一会儿,报错代码 try { Class<?> c= Class.forName( ...

  5. 阻止Infinitescroll.js无限滚动加载页面解决方法

    由于某些原因,想终止当前页继续翻页的操作,可在Infinitescroll回调函数中将翻页事件取消. 代码如下: // -- 每页滚屏加载的页数-- var IpageItems = 5; var i ...

  6. K2任命新的亚太区高级副总裁

    K2, 一个屡获殊荣的企业应用软件公司宣布,任命陈光明(Tan Kwang Meng, KM)为亚太区高级副总裁.这次任命是对公司持续发展的肯定,同时也是对将亚太区作为全球扩张战略的关键市场的承诺. ...

  7. iOS 高效添加圆角效果实战讲解

    圆角(RounderCorner)是一种很常见的视图效果,相比于直角,它更加柔和优美,易于接受.但很多人并不清楚如何设置圆角的正确方式和原理.设置圆角会带来一定的性能损耗,如何提高性能是另一个需要重点 ...

  8. [C/C++]C++标准中的名词

    1.qualified-id.nested-name-specifier: [example: struct A { struct B { void F(); }; }; A is an unqual ...

  9. java基础-007

    41.Servlet Servlet 是处理客户端请求并产生动态网页内容的Java类.Servlet主要是用来处理或者存储HTML表单提交的数据,产生动态内容,在无状态的HTTP协议下管理状态信息.所 ...

  10. sql server2014各版本对比(连接)

    简单的说,sql server 2014为企业版(全功能).BI版.标准版. SQL Server 2014 各个版本支持的功能 http://msdn.microsoft.com/zh-cn/lib ...