C# 继承

C#中的继承是面向对象编程的核心特性之一,它允许你创建一个新类(子类或者派生类),来继承现有类(基类或者父类)的成员。继承在C#当中不仅仅简化了代码的重新使用,还帮助我们实现了多态,使得同一操作可以作用于不同类型的对象

1,基础概念

继承是指一个类(子类)从另一个类(基类)获得属性和方法的能力,基类包含通用的属性和方法,子类可以继承这些成员并根据需要进行扩展或者修改。

C#使用冒号(:)符号来标识继承关系

cs 复制代码
using System;

namespace 继承
{
    public class Pet
    {
        public string Name;
    }

    public class Dog : Pet
    {
        public Dog()
        {
            this.Name = "123"; // 直接设置当前实例的 Name 属性
            Console.WriteLine(this.Name); // 打印当前实例的 Name 属性
        }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            Dog myDog = new Dog(); // 正确调用 Dog 类的构造函数
            // Console.WriteLine(myDog.Name); // 如果需要,也可以这样打印 myDog 的 Name 属性
        }
    }
}

2,继承的类型

  • 单继承:C#支持单继承,即为一个类只能有一个直接基类。虽然类可以继承一个基类,但它可以实现多个接口
  • 多继承:C#不支持多继承,即为一个类不能有多个直接基类。这是为了避免继承链中的复杂性和潜在的 " 菱形继承 " 问题
  • C# 中的菱形继承-CSDN博客

3,继承的实现

  • 构造函数:构造函数不能被继承,但是基类的构造函数可以通过子类的构造函数显式调用
cs 复制代码
using System;


namespace 继承
{
    public class Animal
    {
        public Animal()
        {
            Console.WriteLine("先执行");
        }
    }

    public class Dog : Animal
    {
        public Dog() : base()
//base 关键字用于访问基类(父类)的成员,包括属性、方法和构造函数
        {
            Console.WriteLine("后执行");
        }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            dog.ToString();
        }
    }
}
//当创建 Dog 类的实例时,以下是构造函数调用的顺序:
//Dog 类的构造函数被调用。
//由于 Dog 类的构造函数中使用了 base(),所以 Animal 类的构造函数首先被调用输出
//然后控制权返回到 Dog 类的构造函数,输出
  • 方法重写:基类的方法可以被子类重写,使用virtual关键字标记基类中的方法,子类可以使用override关键字进行重写
cs 复制代码
using System;


namespace 继承
{
    public class Animal
    {
        public virtual void Dog()
        {
            Console.WriteLine("准备复写");
        }
    }

    public class D : Animal
    {
        public override void Dog()
        {
            Console.WriteLine("复写成功");
        }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            D dog = new D();
            dog.Dog();
        }
    }
}

4,特殊的基类

object类是所有类的基础共类,它是唯一的非派生类,是继承层次结构的基础,对于其他类来说,父类和子类的概念都是相对的

5,访问修饰符

继承涉及访问修饰符的使用:

  • public:子类可以访问基类的公共成员
  • protected:子类可以访问基类的受保护成员,但外部类不能访问
  • private:子类不能访问基类的私有成员
相关推荐
暴走约伯2 分钟前
【VFX工具链源码拆解 04】拯救丢失的绑定:Timeline 一键克隆与层级相对路径重映射算法
unity·c#·游戏引擎·硬件工程
1-1=010 分钟前
C# 反射
c#·.net·.netcore
Raas10022 分钟前
AI网关如何接入?MAI Gateway部署实操教程
java·开发语言·人工智能·gateway·ai网关·mai gateway·企业级产品
小小龙学IT28 分钟前
Go 语言 pprof 性能剖析与调优深度解析:把“卡在哪“变成一张可执行的数据图
开发语言·后端·golang
starzy199040 分钟前
Scala Set深度解析:为什么大数据开发离不开它?
大数据·开发语言·scala
熊猫钓鱼>_>1 小时前
三方库 NDK 原生模块跨平台适配与调试【鸿蒙心迹】
开发语言·华为·ai编程·harmonyos·鸿蒙·openharmony·鸿蒙心迹
步步为营DotNet1 小时前
.NET 可观测性选型:Metrics、ActivitySource、EventSource 到底该用哪个
c#·.net·metrics·可观测性
HANDY092001 小时前
从“不照人”到“剂量达标”:扇叶遮挡式UV-C空气消毒的工程边界与可验证评估框架
开发语言·人工智能·嵌入式硬件·智能家居
1024奇点10 小时前
【仓颉语言入门 · 第二篇 第 22 课】
开发语言·ide·开源
Warren2Lynch11 小时前
C4 模型详解:利用 Visual Paradigm 可视化软件架构的综合指南
开发语言·uml