当前位置: 首页 > news >正文

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

        可以把常用方法定义为基类(子类继承的父类),不同子类支持更多方法或同样函数不同的实现方式,类似接口定义函数后,不同的类实现对应接口函数,根据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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 钢管加工长度检测系统源码分享
  • 【LinuxC高级】汇总
  • 《独孤九剑》游戏源码(客户端+服务端+数据库+游戏全套源码)大小2.38G
  • rabbitmq 短信验证码
  • 控制器、运算器、存储器、I/O设备详解
  • c++常用工具类函数
  • 【sgCreateCallAPIFunctionParam】自定义小工具:敏捷开发→调用接口方法参数生成工具
  • Score-based Generative Models
  • 前端接口报错302 [已解决]
  • 多米诺骨牌游戏
  • Python提供内置正则表达式库
  • 大数据-147 Apache Kudu 常用 Java API 增删改查
  • 回归阅读第一本:《瓦尔纳宝典》
  • 使用电脑当服务器,来组建局域网是否安全
  • mini-lsm通关笔记Week2Overview
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Docker: 容器互访的三种方式
  • gcc介绍及安装
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Leetcode 27 Remove Element
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Linux下的乱码问题
  • npx命令介绍
  • php ci框架整合银盛支付
  • rabbitmq延迟消息示例
  • Sass 快速入门教程
  • Windows Containers 大冒险: 容器网络
  • 从零开始学习部署
  • 服务器之间,相同帐号,实现免密钥登录
  • 解析带emoji和链接的聊天系统消息
  • 浏览器缓存机制分析
  • 前端性能优化——回流与重绘
  • 小李飞刀:SQL题目刷起来!
  • 再次简单明了总结flex布局,一看就懂...
  • 【云吞铺子】性能抖动剖析(二)
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #define、const、typedef的差别
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (1)Jupyter Notebook 下载及安装
  • (13)DroneCAN 适配器节点(一)
  • (4) PIVOT 和 UPIVOT 的使用
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (6)添加vue-cookie
  • (7)STL算法之交换赋值
  • (C#)获取字符编码的类
  • (不用互三)AI绘画工具应该如何选择
  • (六)软件测试分工
  • (新)网络工程师考点串讲与真题详解
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)