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
相关推荐
Java面试题总结14 分钟前
Python 开发技巧 · 高级装饰器 —— 从基础到工业级实战
开发语言·python
吴可可12317 分钟前
C# CAD自定义图元优化切割路径
c#
liulilittle1 小时前
Exhaustive drift-fix simulation V2 — KCC on shared-bottleneck wired path.
开发语言·网络·python·tcp/ip·计算机网络·信息与通信·通信
名字还没想好☜2 小时前
Go error 处理:errors.Is/As 与错误包装
开发语言·后端·golang·go·错误处理
红糖奶茶2 小时前
Python 中 while 循环计数异常的常见原因分析与正确搓搓
开发语言·python
Lucky_Turtle2 小时前
【论文写作】PDF图片不清晰,打印生成PDF空白大,PDF字体嵌入
开发语言·pdf·c#
csdndenglu2 小时前
Easy3D:一个轻量级、易用、高效的C++库,用于处理和渲染3D数据,无复杂要求时可替代VTK
开发语言·c++·图形渲染·3d渲染
byte轻骑兵2 小时前
【AVRCP】规范精讲[41]:AV/C指令帧解析,蓝牙遥控交互的底层语言
c语言·开发语言·人机交互·智能制造·avrcp
发光小北2 小时前
Bronze100系列plc Modbus及自由口通信案例
开发语言·php
snow@li2 小时前
Java:后端项目会有一个类似前端node_modules的目录吗 / jar包在本地仓库 ~/.m2/repository 中按版本共存
java·开发语言·前端