20250529-C#知识:继承、密封类、密封方法、重写

article/2025/8/26 16:09:25

C#知识:继承、密封类、密封方法、重写

继承是面向对象的三大特性之一,通过继承能够减少重复代码的编写,有助于提升开发效率。


1、继承

  • C#不同于C++,只支持单继承
  • 当子类出现与父类同名的成员时,父类成员被隐藏(不同于重写)
  • 子类继承父类所有成员(包括私有成员)
  • 个人猜想:子类对象(this表示)中包含了父类对象(base表示)
  • 成员隐藏不会改变子类中父类对象的成员(new关键字不加隐藏也生效)
  • 成员重写会改变子类中父类对象的成员

2、里氏替换原则原则

  • 父类变量容器装载子类对象

3、is和as

  • is用来判断对象是否是指定类或其子类的对象,返回一个bool
  • as用来将对象强转成指定类的对象,成功返回指定类对象,失败返回null
            Animal animal2 = frog;animal2.Run();  //动物跑if (animal2 is Frog)    //青蛙跑(animal2 as Frog).Run();

4、继承中的构造函数

  • 每个类默认有一个无参构造
  • 用户自己定义了有参构造后,默认的那个无参构造会消失
  • 所以一般用户定义有参构造后,还要定义无参构造
  • 可以通过this关键字调用其他重载的构造
  • 执行构造函数时,先执行爷爷类构造,再父类构造,最后子类构造
  • 子类可以通过base关键字来调用父类构造
  • 子类如果没显示调用父类的构造,则会默认调用父类的无参构造

5、运行时多态与方法重写

  • 父类变量(容器)调用指定方法,实际调用的是它指向的子类对象实现的方法
  • 重写之Vob:virtual、override、base
  • virtual成员不能是private的
  • 标记为override的成员不能被标记为new或virtual
  • virtual只要出现一次,其子类后代都可以override
  • override可以重写virtual、abstract、override方法

6、密封类

  • 使用seal关键字修饰的类
  • 无法被继承

7、密封方法

  • seal一般与override一起出现
  • 保护方法不被重写
  • 子类可以用new隐藏父类的密封密封方法

8、完整代码示例:

namespace LearnExtend
{class Creature{public float weight;private float volumn;   //父类私有变量子类无法直接访问public Creature() => Console.WriteLine("生物的无参构造");public Creature(float weight, float volumn){this.weight = weight;this.volumn = volumn;Console.WriteLine("生物的有参构造");}public void Run() => Console.WriteLine("生物跑");public virtual void SelfIntroduce() => Console.WriteLine("我是生物");public virtual void func() => Console.WriteLine("生物密封函数");}class Animal : Creature{public float speed;public Animal() => Console.WriteLine("动物的无参构造");public Animal(float weight, float volumn, float speed):base(weight, volumn){this.speed = speed;Console.WriteLine("动物的有参构造");}public new void Run() => Console.WriteLine("动物跑");  隐藏父类的方法public  override void SelfIntroduce()   //重写父类方法{//base.SelfIntroduce();Console.WriteLine("我是动物");}public sealed override void func() => Console.WriteLine("动物密封函数");}class Frog:Animal{public string color;public new float speed; //隐藏父类成员变量public Frog(){this.color = "绿色";Console.WriteLine("青蛙的无参构造");}public Frog(float weight, float volumn, float speed, string color):base(weight, volumn, speed){this.color = color;Console.WriteLine("青蛙的有参构造");}public new void Run() => Console.WriteLine("青蛙跑");  //隐藏父类的方法public override void SelfIntroduce()    //重写父类方法{Console.WriteLine("波浪浪");}public  new void func() => Console.WriteLine("青蛙密封函数");}internal class Program{//里氏替换原则原则//父类变量容器装载子类对象static void SomeoneSpeak(Creature someone){someone.SelfIntroduce();    //重写 体现了运行时多态someone.Run();  //隐藏 没有体现多态}static void Main(string[] args){//里氏替换原则原则//父类变量容器装载子类对象Frog frog = new Frog(); //生物的无参构造   动物的无参构造 青蛙的无参构造Animal animal = new Animal(1, 2, 3);    //生物的有参构造   动物的有参构造SomeoneSpeak(frog); //波浪浪 生物跑SomeoneSpeak(animal);   //我是动物 生物跑Animal animal2 = frog;animal2.Run();  //动物跑if (animal2 is Frog)    //青蛙跑(animal2 as Frog).Run();}}
}

9、参考资料:

  1. 《唐老狮C#》

本篇结束,感谢您的阅读~

在这里插入图片描述


http://www.hkcw.cn/article/QiYGlAkyxj.shtml

相关文章

第30次CCF计算机软件能力认证-1-重复局面

时间限制: 1.0 秒 空间限制: 512 MiB 下载题目目录(样例文件) 题目背景 国际象棋在对局时,同一局面连续或间断出现3次或3次以上,可由任意一方提出和棋。 题目描述 国际象棋每一个局面可以用大小为 88…

【计算机网络】第2章:应用层—DNS

目录 一、PPT 二、总结 DNS(域名系统)详解 (一)DNS核心概念 (二)DNS查询过程(重点❗) (三)DNS资源记录(RR)类型…

[C]基础18.自定义类型:联合和枚举

博客主页:向不悔本篇专栏:[C]您的支持,是我的创作动力。 文章目录 0、总结1、联合体(共用体)1.1 联合体类型的声明1.2 联合体的特点1.3 联合体大小的计算1.4 联合体的应用场景1.5 联合体练习:判断机器字节序…

目标检测预测框置信度(Confidence Score)计算方式

预测框的置信度(Confidence Score)是目标检测模型输出的一个关键部分,它衡量了模型对一个预测框中包含特定类别对象的确定程度。 不同的目标检测模型(如Faster R-CNN、SSD、YOLO、DETR等)在计算置信度时有其特有的机制…

视觉分析开发范例:Puppeteer截图+计算机视觉动态定位

一、选型背景:传统爬虫已无力应对的视觉挑战 在现代互联网环境中,尤其是小红书、抖音、B站等视觉驱动型平台,传统基于 HTML 的爬虫已经难以满足精准数据采集需求: 内容加载由 JS 动态触发,难以直接解析 HTML&#xf…

Java 开发上门家政系统源码:全流程数字化管理,适配家政公司 / 个体户接单派单

家政服务订单管理混乱、人员调度低效、客户留存率低?基于 Java 开发的上门家政系统源码,凭借其强大的稳定性、灵活的扩展性和全流程数字化管理能力,为家政行业提供了一套高效、低成本的解决方案,实现从接单、派单到服务结算的全链…

java24

1.双列集合Map定义 collection和Map都自有contains方法 把实现类对象赋值给接口类对象属于多态的一种,但是这样不能使用实现类里面的特殊方法和重写方法 写好的API里面好像只有数组的打印值是地址值 2.Map遍历方式 Entry是Map接口里面的一个内部接口,所…

VSCode的下载与安装(2025亲测有效)

目录 0 前言1 下载2 安装3 后记 0 前言 丫的,谁懂啊,尝试了各种办法不行的话,我就不得不拿出我的最后绝招了,卸载,重新安装,我经常要重新安装,所以自己写了一个博客,给自己&#xf…

深入了解linux系统—— 库的制作和使用

什么是库? 库,简单来说就是现有的,成熟的代码; 就比如我们使用的C语言标准库,我们经常使用输入scanf和输出printf,都是库里面给我们实现好的,我们可以直接进行服用。 库呢又分为静态库和动态…

VoltAgent 是一个开源 TypeScript 框架,用于构建和编排 AI 代理

​一、软件介绍 文末提供程序和源码下载 VoltAgent 是一个开源 TypeScript 框架,用于构建和编排 AI 代理 二、什么是 VoltAgent? AI 代理框架提供了构建由自主代理提供支持的应用程序所需的基础结构和工具。这些代理通常由大型语言模型 (&am…

弹性公网IP的五大核心优势解析

在云服务架构中,弹性公网IP(EIP)已成为现代企业网络部署的核心组件。与传统固定IP相比,它通过独特的技术机制解决了动态环境下的公网访问难题。以下五大核心优势决定了其不可替代的价值: 一、动态绑定的灵活性 弹性公…

分布式数据库备份实践

在分布式备份中可以采取两种方式进行备份,一种是采用手动编写backup.yml文件进行备份,另外一种是吧备份过程交给备份工具自动执行。如果需要个性化进行备份,建议采用手动编写备份文件方式进行备份。 以下是针对两种备份方式的实践&#xff1a…

社群分享:义乌|杭州电商|店群卖家,私域鱼塘运营的排单系统开源|私域鱼塘运营|返款软件开源

熟悉东哥的朋友都知道,我自己也运营一个电商社群,主要是针对玩私域|鱼塘的电商玩家。 在当前电商环境下,社群分享型电商、店群卖家及私域鱼塘运营者,面临着日益复杂的订单管理和客服调度问题。传统的人工处理不仅效率低…

一键提取Office内图片的工具

软件介绍 OfficeImagesExtractor是一款专门用于提取office文档里面图片的软件。 软件开发 这款软件是由吾爱大佬namejm专门开发的。 软件使用方法 该软件使用起来非常简单。用户只需要把文件拖入到软件里,再设置好保存目录即可。 支持文件格式 这款软件能提取的…

NVIDIA英伟达AI图片视频内容描述总结软件describe-anything整合包

和大家分享一个英伟达联合其他大学开发的一款应用describe-anything,该应用可以通过AI识别分析并详细描述图片视频中指定区域物体内容,我基于最新版制作了免安装一键启动整合包,下载链接在文章末尾。 describe-anything介绍 Describe Anythi…

农村土地承包经营权二轮延包—归户表

"作为二轮延包公示后的一个确认方式,归户表还是要写一下的。归户表跟摸底表很相似,编程方面,用到的python库,摸底表用py-docx多一些,归户表更多用的pywin32,py-docx对于word无依赖,所以摸底…

基于vue框架的独居老人上门护理小程序的设计r322q(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能:用户,护理人员,服务预约,服务评价,服务类别,护理项目,请假记录 开题报告内容 基于Vue框架的独居老人上门护理小程序的设计开题报告 一、研究背景与意义 (一)研究背景 随着社会老龄化的加剧,独居老…

window11系统 使用GO语言建立TDengine 连接

目录 1、安装GCC、TDengine-client 1、github下载mingw64 软件包 2、解压指定目录、配置环境变量 3、检验gcc是否安装成功 4、安装TDengine-client 2、配置go环境变量 3、配置Goland 系统变量、重启Goland(该软件自己也有系统变量,有时候会和win…

OpenCV计算机视觉实战(9)——阈值化技术详解

OpenCV计算机视觉实战(9)——阈值化技术详解 0. 前言1. 全局阈值与自适应阈值2. Otsu 算法3. 实战案例:文档扫描中的二值化处理4. 算法对比小结系列链接 0. 前言 在图像处理领域,阈值化 (Binarization) 技术就像一把魔术剪刀&…

Java开发经验——阿里巴巴编码规范实践解析6

摘要 本文深入解析了阿里巴巴编码规范在数据库设计和Java开发中的实践应用。详细阐述了数据库字段命名、类型选择、索引命名等规范,以及Java POJO类的对应规范。强调了字段命名的重要性,如布尔字段命名规则、表名和字段名的命名禁忌等。同时&#xff0c…