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

作者:Mr-Jee 时间:2022-01-14 08:10:22 

本文实例讲述了C#中派生类调用基类构造函数用法。分享给大家供大家参考。具体分析如下:

这里的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数

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


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


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


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


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#程序设计有所帮助。

标签:C#,派生类,基类,构造函数
0
投稿

猜你喜欢

  • Jersey Restful接口如何获取参数的问题

    2023-10-29 14:44:16
  • Java学习关于循环和数组练习题整理

    2022-07-19 21:01:24
  • Java将字符串转化为数组的两种方法

    2021-07-07 20:33:49
  • 初学者Android studio安装图文详解

    2022-08-06 07:22:12
  • java微信支付接入流程详解

    2023-07-28 18:37:46
  • 浅谈C#六大设计原则

    2023-05-02 16:29:58
  • 一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out

    2022-06-08 16:36:41
  • spring 注解如何开启声明式事务

    2023-04-09 23:07:42
  • 详解Java高并发编程之AtomicReference

    2023-12-08 14:29:39
  • 使用Java和ffmpeg把音频和视频合成视频的操作方法

    2022-08-22 07:30:20
  • maven profile实现多环境配置的示例

    2023-09-24 12:02:57
  • Java实现的微信图片处理工具类【裁剪,合并,等比例缩放等】

    2022-03-26 11:32:59
  • C#中out保留字用法实例分析

    2021-07-28 18:44:54
  • 一文带你了解SpringBoot中常用注解的原理和使用

    2022-07-22 14:27:43
  • IDEA JetBrains Mono字体介绍和安装教程(详解)

    2022-01-23 17:57:51
  • android之listview悬浮topBar效果

    2022-12-24 23:29:58
  • java开发工作中对InheritableThreadLocal使用思考

    2023-11-24 21:46:44
  • Java非法字符: ‘\\ufeff‘问题及说明

    2023-02-01 09:06:07
  • .net从服务器下载文件中文名乱码解决方案

    2022-09-11 15:23:11
  • Java 设计模式原则之迪米特法则详解

    2021-11-17 19:34:32
  • asp之家 软件编程 m.aspxhome.com