• C# 继承


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

    1,基础概念

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

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

    1. using System;
    2. namespace 继承
    3. {
    4. public class Pet
    5. {
    6. public string Name;
    7. }
    8. public class Dog : Pet
    9. {
    10. public Dog()
    11. {
    12. this.Name = "123"; // 直接设置当前实例的 Name 属性
    13. Console.WriteLine(this.Name); // 打印当前实例的 Name 属性
    14. }
    15. }
    16. internal class Program
    17. {
    18. static void Main(string[] args)
    19. {
    20. Dog myDog = new Dog(); // 正确调用 Dog 类的构造函数
    21. // Console.WriteLine(myDog.Name); // 如果需要,也可以这样打印 myDog 的 Name 属性
    22. }
    23. }
    24. }

    2,继承的类型

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

    3,继承的实现

    • 构造函数:构造函数不能被继承,但是基类的构造函数可以通过子类的构造函数显式调用
    1. using System;
    2. namespace 继承
    3. {
    4. public class Animal
    5. {
    6. public Animal()
    7. {
    8. Console.WriteLine("先执行");
    9. }
    10. }
    11. public class Dog : Animal
    12. {
    13. public Dog() : base()
    14. //base 关键字用于访问基类(父类)的成员,包括属性、方法和构造函数
    15. {
    16. Console.WriteLine("后执行");
    17. }
    18. }
    19. internal class Program
    20. {
    21. static void Main(string[] args)
    22. {
    23. Dog dog = new Dog();
    24. dog.ToString();
    25. }
    26. }
    27. }
    28. //当创建 Dog 类的实例时,以下是构造函数调用的顺序:
    29. //Dog 类的构造函数被调用。
    30. //由于 Dog 类的构造函数中使用了 base(),所以 Animal 类的构造函数首先被调用输出
    31. //然后控制权返回到 Dog 类的构造函数,输出
    • 方法重写:基类的方法可以被子类重写,使用virtual关键字标记基类中的方法,子类可以使用override关键字进行重写
    1. using System;
    2. namespace 继承
    3. {
    4. public class Animal
    5. {
    6. public virtual void Dog()
    7. {
    8. Console.WriteLine("准备复写");
    9. }
    10. }
    11. public class D : Animal
    12. {
    13. public override void Dog()
    14. {
    15. Console.WriteLine("复写成功");
    16. }
    17. }
    18. internal class Program
    19. {
    20. static void Main(string[] args)
    21. {
    22. D dog = new D();
    23. dog.Dog();
    24. }
    25. }
    26. }

    4,特殊的基类

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

    5,访问修饰符

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

    • public:子类可以访问基类的公共成员
    • protected:子类可以访问基类的受保护成员,但外部类不能访问
    • private:子类不能访问基类的私有成员
  • 相关阅读:
    【PyQT5】PyQT5通用功能设置
    关于技术人员成长的一些建议
    运维工程师怎么找兼职?什么样的兼职合适?
    文件系统考古2:1984 - BSD Fast Filing System
    【编程不良人】SpringSecurity实战学习笔记01---权限管理、环境搭建
    【每日一题】补档 ABC308E - MEX | 遍历保存 |简单
    Quartz之数据库存储(代码案例)
    编译器优化:何为别名分析
    mysql聚簇索引和主键索引的区别
    Cisco Packet Tracer HSRP技术练习
  • 原文地址:https://blog.csdn.net/m0_74995879/article/details/141107251