C# 继承父类,base指定构造函数

embedded/2024/9/23 0:30:59/

        可以把常用方法定义为基类(子类继承的父类),不同子类支持更多方法或同样函数不同的实现方式,类似接口定义函数后,不同的类实现对应接口函数,根据new对应的类来调用对应的函数执行。

        在C#中,如果子类的构造函数没有显式调用base()(即父类构造函数),那么编译器会自动插入对父类参数less构造函数的调用。这意味着即使子类的构造函数中没有显式的base()调用,父类的无参数构造函数仍然会在子类构造函数之前执行。

以下主要描述几种情况代码:

1、父类只有无参构造函数,子类不用base也会先调用父类构造函数

2、父类构造函数有入参或多个构造函数,子类需要使用base去指向父类对应的构造函数

不用base关键字,示例代码

using System;class Parent
{public Parent(){Console.WriteLine("Parent constructor called");}
}class Child : Parent
{public Child(){Console.WriteLine("Child constructor called");}
}class Program
{static void Main(string[] args){Child child = new Child();}
}

运行结果

Parent constructor called
Child constructor called

base关键字,示例代码

using System;class Parent
{public Parent(){Console.WriteLine("Parent default constructor called");}public Parent(int value){Console.WriteLine($"Parent constructor with parameter called: {value}");}
}class Child : Parent
{public Child() : base() // 调用父类的无参数构造函数{Console.WriteLine("Child default constructor called");}public Child(int value) : base(value) // 调用父类的带参数构造函数{Console.WriteLine("Child constructor with parameter called: {0}", value);}public Child(string value) : base()  // 默认调用父类的带参数构造函数{Console.WriteLine("Child constructor with parameter called: {0}", value);}
}class Program
{static void Main(string[] args){Child child1 = new Child();Child child2 = new Child(42);Child child3 = new Child("hello");}
}

运行结果

Parent default constructor called
Child default constructor called
Parent constructor with parameter called: 42
Child constructor with parameter called: 42
Parent default constructor called
Child constructor with parameter called: hello


http://www.ppmy.cn/embedded/115316.html

相关文章

Java 微服务框架 HP-SOA v1.1.4

HP-SOA 功能完备,简单易用,高度可扩展的Java微服务框架。 项目主页 : https://www.oschina.net/p/hp-soa下载地址 : https://github.com/ldcsaa/hp-soa开发文档 : https://gitee.com/ldcsaa/hp-soa/blob/master/README.mdQQ Group: 44636872, 66390394…

【HTTPS】中间人攻击和证书的验证

中间人攻击 服务器可以创建出一堆公钥和私钥,黑客也可以按照同样的方式,创建一对公钥和私钥,冒充自己是服务器(搅屎棍) 黑客自己也能生成一对公钥和私钥。生成公钥和私钥的算法是开放的,服务器能生产&…

redis常见类型设置、获取键值的基础命令

redis常见类型设置、获取键值的基础命令 获取键值的数据类型 命令:TYPE keyname 常见数据类型设置、获取键值的基本命令 string类型 置键值:set keyname valuename获取键值:get keyname删除: del keyname list类型 从左边向列表…

鸿蒙应用生态构建的核心目标

保护开发者和用户利益的同时维护整体系统的安全性,对生态构建者是至关重要的。以开发者为中心,构建端到端应用安全能力,保护应用自身安全、运行时安全,保障开发者权益,是鸿蒙应用生态构建的核心目标。 应用生命周期主要…

可转债量化策略研究,QMT如何获取可转债合约信息?

获取可转债合约信息 此函数被设计为专门用于单一转债的查询,能够提供详尽的转债信息。通过使用这个函数,您可以获取到深度的特定转债数据,包括其涨跌停价格、上市日期、退市日期和期权到期日等关键信息。这种全面的信息将成为您理解和分析转…

MAC 安装 nvm

在Mac上安装NVM(Node Version Manager)可以通过多种方法实现,以下是两种常用的安装方法: 方法一:使用Homebrew安装(推荐) Homebrew是macOS的包管理器,通过它可以方便地安装和管理各…

1 elasticsearch安装

【0】官网参考 https://www.elastic.co/guide/en/elasticsearch/reference/7.11/targz.html 【1】Centos7 下载安装 【1.1】下载 官网:Download Elasticsearch | Elastic 选择好自己想要的相关版本即可; 【2】Centos7.X 前置环境配置(uli…

Git之如何删除Untracked文件(六十八)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…