• C# 什么是继承和派生


    C# 什么是继承和派生

    在 C# 中,继承(Inheritance)是一种机制,它允许一个类(子类)从另一个类(父类)中继承属性和方法。这种关系使得子类可以重用父类的代码,同时可以在子类中添加或修改属性和方法。继承有助于减少代码重复和提高代码的可维护性。

    派生(Derivation)是指使用继承机制创建的子类。子类从父类继承而来,可以扩展或修改父类的功能。在 C# 中,派生类通常是通过使用关键字 classnew 关键字来创建的。

    在一个子类继承多个父类的情况下,子类的实例化对象可以访问所有父类中被继承的内容。让我用一个比喻来解释一下。

    假设你是一个魔法师,而这些父类就像是不同的魔法书。每本魔法书都包含了独特的咒语和技能(方法和属性)。当你作为一个子类继承了多个父类时,你就像是拥有了多本魔法书的超级魔法师!

    因此,当你实例化一个子类的对象时,你可以通过该对象访问并使用所有继承自父类的方法和属性。无论这些方法和属性是来自第一个父类、第二个父类还是其他父类,都可以直接使用。这是因为子类会继承父类的方法和属性,并具备相应的功能。

    1. // 定义一个父类
    2. public class Animal
    3. {
    4. protected string name;
    5. public virtual void Speak()
    6. {
    7. Debug.Log("我是动物。");
    8. }
    9. }
    10. // 定义一个子类,继承自父类Animal
    11. public class Cat : Animal
    12. {
    13. public override void Speak()
    14. {
    15. Debug.Log("我是一只猫咪,喵喵喵~");
    16. }
    17. public void Purr()
    18. {
    19. Debug.Log("猫咪正在发出呼噜声。");
    20. }
    21. }
    22. // 在游戏对象上附加该脚本
    23. public class TestScript : MonoBehaviour
    24. {
    25. private void Start()
    26. {
    27. // 实例化Cat类的对象
    28. Cat myCat = new Cat();
    29. // 调用继承自父类的方法
    30. myCat.Speak(); // 输出:我是一只猫咪,喵喵喵~
    31. // 调用子类自己新增的方法
    32. myCat.Purr(); // 输出:猫咪正在发出呼噜声。
    33. // 可以将子类对象赋值给父类引用
    34. Animal animal = myCat;
    35. // 通过父类引用调用继承自父类的方法
    36. animal.Speak(); // 输出:我是一只猫咪,喵喵喵~
    37. }
    38. }

    总结一下,当一个子类继承多个父类时,子类的实例化对象可以访问并使用所有继承自父类的方法和属性。它们就像是一个超级魔法师,可以利用所有魔法书中的咒语和技能。

    在继承中,有一些内容是无法被子类继承的。以下是一些不可以被继承的内容:

    1. 构造函数(Constructor):子类会继承父类的方法和属性,但构造函数不会被继承。每个类都需要自己定义并实现自己的构造函数。

    2. 私有成员(Private Members):私有成员包括私有方法、私有属性和私有字段等,它们只能在声明它们的类内部访问,无法被子类继承。

    3. 静态成员(Static Members):静态成员属于类本身,而不属于类的实例。虽然子类可以访问父类的静态成员,但无法继承静态成员。

    4. 密封类(Sealed Class):如果一个类被声明为密封类,意味着它不能被其他类继承。因此,无法从密封类派生出子类。

    5. 重写修饰符(Override Modifier):使用 sealed 修饰符标记的方法无法被子类再次重写。

    总结起来,构造函数、私有成员、静态成员、密封类以及被标记为 sealed 的重写方法都是不可被继承的。其他公共成员,包括公共方法、属性和字段等,都可以被子类继承并访问。

  • 相关阅读:
    带码农《手写Mybatis》进度3:实现映射器的注册和使用
    使用nrm 方式 管理npm 仓库
    自动化密码分析
    Spring(一)核心概念
    qbreakpad 生成dump
    【计算机网络】互联网公司的网络架构和业务场景
    HTTPS安全相关-通信安全的四个特性-ssl/tls
    【ES实战】ES中关于segment的小结
    AcWing 827. 双链表
    SpringCloud实战项目(1)---创建空项目 jdk17
  • 原文地址:https://blog.csdn.net/leoysq/article/details/132693151