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

C# 什么是继承和派生

C# 什么是继承和派生

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

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

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

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

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

// 定义一个父类
public class Animal
{protected string name;public virtual void Speak(){Debug.Log("我是动物。");}
}// 定义一个子类,继承自父类Animal
public class Cat : Animal
{public override void Speak(){Debug.Log("我是一只猫咪,喵喵喵~");}public void Purr(){Debug.Log("猫咪正在发出呼噜声。");}
}// 在游戏对象上附加该脚本
public class TestScript : MonoBehaviour
{private void Start(){// 实例化Cat类的对象Cat myCat = new Cat();// 调用继承自父类的方法myCat.Speak(); // 输出:我是一只猫咪,喵喵喵~// 调用子类自己新增的方法myCat.Purr(); // 输出:猫咪正在发出呼噜声。// 可以将子类对象赋值给父类引用Animal animal = myCat;// 通过父类引用调用继承自父类的方法animal.Speak(); // 输出:我是一只猫咪,喵喵喵~}
}

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

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

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

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

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

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

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

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

http://www.lryc.cn/news/157765.html

相关文章:

  • 无涯教程-JavaScript - HEX2BIN函数
  • 前端面试0906
  • OceanBase社区版4.x核心技术解密
  • 快速安装k8s
  • [FFmpeg] 常用ffmpeg命令
  • 代码随想录训练营第五十七天|647. 回文子串、516.最长回文子序列
  • 对线程池设置做压测
  • 【网络通信 -- WebRTC】项目实战记录 -- mediasoup android 适配 webrtc m94
  • 【力扣周赛】第 357 场周赛(⭐反悔贪心)
  • css重置
  • tcpdump相关
  • MFC新建内部消息
  • linux查找目录
  • 机器学习:可解释学习
  • UE5- c++ websocket里实现调用player里的方法
  • 线性代数的学习和整理18:什么是维度,什么是秩?秩的各种定理秩的计算 (计算部分未完成)
  • Centos 6.5 升级到Centos7指导手册
  • 详解python中的映射类型---字典
  • gdal求矢量图形的形心
  • <深度学习基础> Batch Normalization
  • Ubuntu yolov5 环境配置
  • 【自执行闭包JS逆向】某网站登录MD5加密分析
  • Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明
  • 【Linux】- 一文秒懂shell编程
  • CentOS下多网卡绑定多IP段时导致只有一个会通的问题解决
  • 关于实现 Vue 动态数据显示,比如数字 0 或 1 怎么显示为 男 或 女等等的动态显示实现方法
  • mac制作ssl证书|生成自签名证书,nodejs+express在mac上搭建https+wss(websocket)服务器
  • Unix System V BSD POSIX 究竟是什么?
  • 数据集学习笔记(六):目标检测和图像分割标注软件介绍和使用,并转换成YOLO系列可使用的数据集格式
  • 【高阶数据结构】红黑树 {概念及性质;红黑树的结构;红黑树的实现;红黑树插入操作详细解释;红黑树的验证}