C# 探险之旅:第三十五节 - 类型class之抽象类 (Abstract Class) 和 抽象方法 (Abstract Method)
👋 嗨,勇敢的探险家们!欢迎再次踏上C#的神秘之旅。今天,我们要进入一片既神秘又充满无限可能的领域——抽象类与抽象函数的奇幻森林。想象一下,你是一名勇敢的骑士,要在这片森林里寻找传说中的“编程之宝”。准备好了吗?让我们骑着代码战马,出发吧!
抽象类:图纸还是蓝图?
首先,让我们来理解什么是抽象类。想象你是一位建筑师,你要建造一座城堡,但你不打算亲自动手,而是想让别人根据你的设计来建造。这时,你会画一张详细的蓝图,标明城堡的每个房间、每扇门的位置。这张蓝图,就是抽象类的完美比喻。
在C#的世界里,抽象类就像这张蓝图。它定义了一个类的基本框架,包括哪些方法应该有,但不去实现它们的具体细节。这听起来是不是很“懒”?但实际上,这是为了让代码更加灵活和可复用。
//建立一个抽象类
public abstract class CastleBlueprint
{// 抽象方法,只有声明,没有实现public abstract void BuildTower();public abstract void BuildGate();
}
看,这就是一个抽象类的简单例子。CastleBlueprint类里定义了两个抽象方法:BuildTower和BuildGate,但具体怎么建,它可不告诉你!
抽象函数:未完成的乐章
接下来,我们聊聊抽象函数。继续用城堡的例子,抽象函数就像是蓝图上的一个个标记,告诉你“这里应该有座塔”,“那里应该有扇门”,但具体塔长什么样,门怎么开,都得你自己去想办法。
public abstract void BuildTower();
这行代码就像是在说:“嘿,未来的建筑师,这里得建个塔,但具体怎么建,你自己看着办吧!”
实现抽象类:从蓝图到现实
有了蓝图,接下来就需要有人把它变成现实。在C#中,这意味着你需要创建一个继承自抽象类的具体类,并实现所有的抽象方法。
public class MedievalCastle : CastleBlueprint
{public override void BuildTower(){Console.WriteLine("建造了一座圆塔,上面有尖顶!");}public override void BuildGate(){Console.WriteLine("建造了一座坚固的木门,上面还有铁钉!");}
}
看,MedievalCastle类继承了CastleBlueprint,并且实现了BuildTower和BuildGate方法。现在,这座城堡不再是蓝图上的幻想,而是实实在在的建筑了!
实战演练:动物园大冒险
让我们看看如何使用抽象类和抽象方法来创建一个简单的动物园程序。假设我们有几种不同的动物,它们都可以发出声音和吃东西。来看看我们的代码吧!
Console.WriteLine("欢迎来到神奇动物园!");
// 创建不同种类的动物
Animal dog = new Dog();
Animal cat = new Cat();
Animal elephant = new Elephant();// 让动物们展示自己的技能
dog.MakeSound(); // 输出: 汪汪!
dog.Eat(); // 输出: 狗狗 正在吃东西...cat.MakeSound(); // 输出: 喵喵!
cat.Eat(); // 输出: 猫咪 正在吃东西...elephant.MakeSound(); // 输出: 吼吼!
elephant.Eat(); // 输出: 大象 正在吃东西...Console.WriteLine("感谢您的光临,祝您玩得开心!");
public abstract class Animal
{// 抽象属性public abstract string Name { get; }// 抽象方法public abstract void MakeSound();// 非抽象方法public void Eat(){Console.WriteLine($"{Name} 正在吃东西...");}
}public class Dog : Animal
{// 实现抽象属性public override string Name => "狗狗";// 实现抽象方法public override void MakeSound(){Console.WriteLine("汪汪!");}
}public class Cat : Animal
{// 实现抽象属性public override string Name => "猫咪";// 实现抽象方法public override void MakeSound(){Console.WriteLine("喵喵!");}
}public class Elephant : Animal
{// 实现抽象属性public override string Name => "大象";// 实现抽象方法public override void MakeSound(){Console.WriteLine("吼吼!");}
}
我们实际运行这段代码,来看看程序的输出结果:

非常有趣吧!
总结:抽象的艺术
抽象类和抽象函数就像是编程中的“懒人神器”,它们让代码的设计变得更加灵活和强大。通过定义框架而不实现细节,你可以创建出更加通用、易于扩展的代码结构。下次当你面对一个复杂的问题时,不妨想想:“我能不能用抽象类来简化这个问题呢?”
好了,今天的探险就到这里。你已经掌握了抽象类和抽象函数的奥秘,是时候用你的新知识去建造属于你的编程城堡了!记住,编程就像建造城堡,既需要创意,也需要坚实的基础。我们下一节再见,勇敢的探险家们!
希望这个幽默而轻松的讲解能帮助你更好地理解C#中的抽象类和抽象函数。编程之旅充满了挑战和乐趣,让我们一起继续探索吧!
相关文章:
C# 探险之旅:第三十五节 - 类型class之抽象类 (Abstract Class) 和 抽象方法 (Abstract Method)
👋 嗨,勇敢的探险家们!欢迎再次踏上C#的神秘之旅。今天,我们要进入一片既神秘又充满无限可能的领域——抽象类与抽象函数的奇幻森林。想象一下,你是一名勇敢的骑士,要在这片森林里寻找传说中的“编程之宝”…...
qt-C++笔记之父类窗口、父类控件、对象树的关系
qt-C笔记之父类窗口、父类控件、对象树的关系 code review! 参考笔记 1.qt-C笔记之父类窗口、父类控件、对象树的关系 2.qt-C笔记之继承自 QWidget和继承自QObject 并通过 getWidget() 显示窗口或控件时的区别和原理 3.qt-C笔记之自定义类继承自 QObject 与 QWidget 及开发方式…...
Cisco Packet Tarcer配置计网实验笔记
文章目录 概要整体架构流程网络设备互连基础拓扑图拓扑说明配置步骤 RIP/OSPF混合路由拓扑图拓扑说明配置步骤 BGP协议拓扑图拓扑说明配置步骤 ACL访问控制拓扑图拓扑说明配置步骤 HSRP冗余网关拓扑图拓扑说明配置步骤 小结 概要 一些环境配置笔记 整体架构流程 网络设备互连…...
使用torch模拟 BMM int8量化计算。
使用torch模型BMM int8计算。 模拟:BMM->softmax->BMM 计算流程 import torch import numpy as np torch.manual_seed(777) def int8_quantize_per_token(x: torch.Tensor, axis: int -1, attnsFalse):if x.dtype ! torch.float32:x x.type(torch.float32)…...
【FreeMarker】实现生成Controller根据模板勾选的内容查询
需求:根据模板列表勾选的字段查询列表数据 FreeMarker代码: /*** 分页列表查询** param ${entityName?uncap_first}* param pageNo* param pageSize* param req* return*///AutoLog(value "${tableVo.ftlDescription}-分页列表查询")ApiOp…...
深入理解 XPath:XML 和 HTML 文档的利器
XPath(XML Path Language)是一种用于在 XML 和 HTML 文档中定位节点的语言。它常用于 XML 解析、Web 数据抓取(如 Selenium 或 Scrapy)以及配置文件解析。本文将带你深入了解 XPath 的语法、功能及其在实际中的应用。 目录 一、什…...
DDR5 中的数据反馈判决均衡(DFE):全面解析与展望
目录 一、引言二、DFE原理三、DFE架构四、实现方案五、测试方法六、DFE效果七、成本与收益八、具体应用九、技术发展趋势十、参考文献 一、引言 DDR5 作为新一代内存标准,其中的数据反馈判决均衡(DFE)技术更是引人注目。DFE即判决反馈均衡&a…...
Axure高保真数据可视化大屏图表组件库
推出了一款高保真数据可视化大屏图表组件库,旨在为用户提供丰富的图表类型,使数据呈现更加直观、生动。本文将详细介绍该组件库中的各类图表元件,包括面积图、折线图、柱状图、条形图、圆环图、雷达图、仪表图以及综合类图表,以满…...
100个问题学 langchain 入门 (1/10)
100个问题学 langchain 入门 (1/10) 文章目录 100个问题学 langchain 入门 (1/10)前言**问题 1** 什么是 langchain,解决什么问题?**问题 2** LangChain 的核心组件有哪些?请列举并简要说明每个组件的作用。**问题 3** 在 LangChain 中&#…...
0001.基于springmvc简易酒店管理系统后台
一.系统架构 springmvcjsplayuimysql 二.功能特性 简单易学习,虽然版本比较老但是部署方便,tomcat环境即可启用;代码简洁,前后端代码提供可统一学习;祝愿您能成尽快为一位合格的程序员,愿世界没有BUG; …...
每日一题 326. 3 的幂
326. 3 的幂 简单 class Solution { public:bool isPowerOfThree(int n) {while(n > 3){if(n % 3 0){n n/3;}else{return false;}}return n 1;} };...
解码数据有序之道——常见排序算法总结
本文整理了常见的排序算法,采用c编码,并对其时间复杂度作以了分析。 1. 冒泡排序(Bubble Sort) 实现思路: 从数组的第一个元素开始,依次比较相邻的两个元素。如果当前元素大于下一个元素,则交…...
C语言实现图片文件的复制
在C语言中,直接处理图片文件(如JPEG、PNG等)的复制,通常涉及到文件I/O操作。这些图片文件是二进制文件,因此需要使用二进制模式读取和写入文件。 图片文件复制代码: #include <stdio.h> #include&l…...
一、windows上配置ninja环境
Ninja是Google的一名程序员推出的注重速度的构建工具,一般在Unix/Linux上的程序通过make/makefile来构建编译,而Ninja通过将编译任务并行组织,大大提高了构建速度。下面介绍了windows上配置Ninja环境。 1.下载Ninja ninja官网地址࿱…...
我们来编程 -- win11多jdk版本切换
题记 售前的酒喝到位了调研需求及文档整理出来了开发要入场了,真惨啊!年底了,手里活干的好好的,因为flyback在项目地,硬是被安排进来了拥抱变化,我呸…不得不切换系统,构建代码,一股…...
JAVA 图形界面编程 AWT篇(1)
前言 为了应对JAVA课设,小编走上了java的图形界面编程的道路,通过博客分享自己的学习历程,并进行笔记的记录。 AWT(Abstract Window Toolkit)介绍 AWT(抽象窗口工具包)是 Java 最早的图形用户界…...
C语言 字符串输入输出函数、scanf(“%[^\n]“,)可输入空格 、fgets删除换行符
字符串输入函数: scanf("%s",数组名) gets(数组名) fgets() --- 文件流输入函数 函数原型: int scanf( const char *format, ...…...
【蓝桥杯每日一题】推导部分和——带权并查集
推导部分和 2024-12-11 蓝桥杯每日一题 推导部分和 带权并查集 题目大意 对于一个长度为 ( N ) 的整数数列 A 1 , A 2 , ⋯ , A N A_1, A_2, \cdots, A_N A1,A2,⋯,AN ,小蓝想知道下标 ( l ) 到 ( r ) 的部分和 ∑ i l r A i A l A l 1 ⋯ A r \sum_{…...
Linux 磁盘满了怎么办?快速排查和清理方法
当 Linux 磁盘满了,会导致系统无法正常运行,比如无法写入文件、服务停止、甚至系统崩溃。因此,快速排查并清理磁盘空间是非常重要的。以下是详细的排查和解决步骤: 一、快速定位磁盘占用原因 1. 检查磁盘使用情况 使用 df 命令查…...
【专题】2024年中国新能源汽车用车研究报告汇总PDF洞察(附原数据表)
原文链接: https://tecdat.cn/?p38564 本年度,国家及地方政府持续发力,推出诸多政策组合拳,全力推动汽车产业向更高质量转型升级,积极鼓励消费升级,并大力推行以旧换新等惠民生、促发展举措。尤为引人注目…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
