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

C# 探险之旅:第三十五节 - 类型class之抽象类 (Abstract Class) 和 抽象方法 (Abstract Method)

👋 嗨,勇敢的探险家们!欢迎再次踏上C#的神秘之旅。今天,我们要进入一片既神秘又充满无限可能的领域——抽象类与抽象函数的奇幻森林。想象一下,你是一名勇敢的骑士,要在这片森林里寻找传说中的“编程之宝”。准备好了吗?让我们骑着代码战马,出发吧!

抽象类:图纸还是蓝图?

首先,让我们来理解什么是抽象类。想象你是一位建筑师,你要建造一座城堡,但你不打算亲自动手,而是想让别人根据你的设计来建造。这时,你会画一张详细的蓝图,标明城堡的每个房间、每扇门的位置。这张蓝图,就是抽象类的完美比喻。

在C#的世界里,抽象类就像这张蓝图。它定义了一个类的基本框架,包括哪些方法应该有,但不去实现它们的具体细节。这听起来是不是很“懒”?但实际上,这是为了让代码更加灵活和可复用。

//建立一个抽象类
public abstract class CastleBlueprint
{// 抽象方法,只有声明,没有实现public abstract void BuildTower();public abstract void BuildGate();
}

看,这就是一个抽象类的简单例子。CastleBlueprint类里定义了两个抽象方法:BuildTowerBuildGate,但具体怎么建,它可不告诉你!

抽象函数:未完成的乐章

接下来,我们聊聊抽象函数。继续用城堡的例子,抽象函数就像是蓝图上的一个个标记,告诉你“这里应该有座塔”,“那里应该有扇门”,但具体塔长什么样,门怎么开,都得你自己去想办法。

public abstract void BuildTower();

这行代码就像是在说:“嘿,未来的建筑师,这里得建个塔,但具体怎么建,你自己看着办吧!”

实现抽象类:从蓝图到现实

有了蓝图,接下来就需要有人把它变成现实。在C#中,这意味着你需要创建一个继承自抽象类的具体类,并实现所有的抽象方法。

public class MedievalCastle : CastleBlueprint
{public override void BuildTower(){Console.WriteLine("建造了一座圆塔,上面有尖顶!");}public override void BuildGate(){Console.WriteLine("建造了一座坚固的木门,上面还有铁钉!");}
}

 看,MedievalCastle类继承了CastleBlueprint,并且实现了BuildTowerBuildGate方法。现在,这座城堡不再是蓝图上的幻想,而是实实在在的建筑了!

实战演练:动物园大冒险

让我们看看如何使用抽象类和抽象方法来创建一个简单的动物园程序。假设我们有几种不同的动物,它们都可以发出声音和吃东西。来看看我们的代码吧!

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语言中&#xff0c;直接处理图片文件&#xff08;如JPEG、PNG等&#xff09;的复制&#xff0c;通常涉及到文件I/O操作。这些图片文件是二进制文件&#xff0c;因此需要使用二进制模式读取和写入文件。 图片文件复制代码&#xff1a; #include <stdio.h> #include&l…...

一、windows上配置ninja环境

Ninja是Google的一名程序员推出的注重速度的构建工具&#xff0c;一般在Unix/Linux上的程序通过make/makefile来构建编译&#xff0c;而Ninja通过将编译任务并行组织&#xff0c;大大提高了构建速度。下面介绍了windows上配置Ninja环境。 1.下载Ninja ninja官网地址&#xff1…...

我们来编程 -- win11多jdk版本切换

题记 售前的酒喝到位了调研需求及文档整理出来了开发要入场了&#xff0c;真惨啊&#xff01;年底了&#xff0c;手里活干的好好的&#xff0c;因为flyback在项目地&#xff0c;硬是被安排进来了拥抱变化&#xff0c;我呸…不得不切换系统&#xff0c;构建代码&#xff0c;一股…...

JAVA 图形界面编程 AWT篇(1)

前言 为了应对JAVA课设&#xff0c;小编走上了java的图形界面编程的道路&#xff0c;通过博客分享自己的学习历程&#xff0c;并进行笔记的记录。 AWT&#xff08;Abstract Window Toolkit&#xff09;介绍 AWT&#xff08;抽象窗口工具包&#xff09;是 Java 最早的图形用户界…...

C语言 字符串输入输出函数、scanf(“%[^\n]“,)可输入空格 、fgets删除换行符

字符串输入函数&#xff1a; scanf&#xff08;"%s"&#xff0c;数组名&#xff09; gets&#xff08;数组名&#xff09; fgets&#xff08;&#xff09; --- 文件流输入函数 函数原型&#xff1a; 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​ &#xff0c;小蓝想知道下标 ( l ) 到 ( r ) 的部分和 ∑ i l r A i A l A l 1 ⋯ A r \sum_{…...

Linux 磁盘满了怎么办?快速排查和清理方法

当 Linux 磁盘满了&#xff0c;会导致系统无法正常运行&#xff0c;比如无法写入文件、服务停止、甚至系统崩溃。因此&#xff0c;快速排查并清理磁盘空间是非常重要的。以下是详细的排查和解决步骤&#xff1a; 一、快速定位磁盘占用原因 1. 检查磁盘使用情况 使用 df 命令查…...

【专题】2024年中国新能源汽车用车研究报告汇总PDF洞察(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p38564 本年度&#xff0c;国家及地方政府持续发力&#xff0c;推出诸多政策组合拳&#xff0c;全力推动汽车产业向更高质量转型升级&#xff0c;积极鼓励消费升级&#xff0c;并大力推行以旧换新等惠民生、促发展举措。尤为引人注目…...

本地能跑线上崩?MonkeyCode统一云端环境解决团队开发噩梦

行内深耕多年&#xff0c;深知绝大多数程序员都被开发环境问题绊住前行脚步&#xff0c;几大行业通病几乎人人都遇见过。换新设备就得全盘重搭开发环境&#xff0c;新电脑到手没空敲代码&#xff0c;反倒整日忙着安装各类工具、调配环境变量、适配项目依赖&#xff0c;耗费大把…...

零基础掌握GVAS解析与游戏存档编辑:解锁Unreal Engine数据处理新姿势

零基础掌握GVAS解析与游戏存档编辑&#xff1a;解锁Unreal Engine数据处理新姿势 【免费下载链接】uesave Rust library and CLI to read and write Unreal Engine save files 项目地址: https://gitcode.com/gh_mirrors/ue/uesave Unreal Engine游戏存档修改不再困难&a…...

【项目实训(个人8)】

继续进行法律文书智能摘要系统的开发&#xff0c;新增了几个功能&#xff0c;并优化了用户体验概述本次开发为法律文书智能摘要系统新增了两项核心功能。其一是摘要版本管理&#xff0c;支持同一文档的多版本摘要生成、存储、对比和回滚。用户在生成摘要时&#xff0c;系统自动…...

探灵直播2026最新官方正版免费下载 一键转存 永久更新 (看到速转存 资源随时走丢)

下载链接 本文将为您客观介绍《探灵直播》的幕后作者、核心玩法机制&#xff0c;并将其与同类型竞品进行简单的横向对比&#xff0c;带您全面了解这款作品的独特之处。 一、 幕后作者&#xff1a;专注于美少女题材的 qureate 《探灵直播》的开发商 qureate 是一家在日本游戏界…...

裁员风暴:从大厂骨干到失业边缘

2024年的春天&#xff0c;我在一家头部互联网公司担任测试主管的第八个年头&#xff0c;一场突如其来的裁员风暴打破了看似安稳的生活。公司战略收缩&#xff0c;测试部门首当其冲&#xff0c;我和近三成同事被列入优化名单。看着熟悉的工位被迅速清空&#xff0c;手里的离职证…...

2026这6款硬核降AIGC软件大公开,一键把AI检测率精准控到安全区!

步入 2026 年&#xff0c;学术圈的规则早已不是过去那个模样。从最初的查重率焦虑&#xff0c;到如今的 AIGC 检测风暴&#xff0c;整个环境正在经历一场前所未有的洗牌。AI 检测系统越来越“狡猾”&#xff0c;高校的审查标准也愈发严苛。光是把重复率压下去已经不够了&#x…...

OpenClaw 3 机集群(Windows + Linux 混合)一键脚本 + 完整配置

集群架构规划&#xff08;1 主 2 从&#xff09;统一安装脚本&#xff08;Windows PowerShell / Linux bash&#xff09;主节点配置&#xff08;gateway 调度&#xff09;从节点配置&#xff08;worker 注册到主&#xff09;集群通信、端口、令牌、存储一键启停、扩容、状态检…...

Gitee Scan:关键领域软件工厂的安全检测能力分析

Gitee Scan&#xff1a;关键领域软件工厂的安全检测能力分析 文章概述 软件供应链安全正成为互联网、金融、国防等关键领域关注的焦点。Gitee Scan 是 Gitee DevSecOps 平台中集成的安全检测组件&#xff0c;提供 SAST&#xff08;静态应用安全测试&#xff09;、SBOM&#xff…...

为什么92%的Lovable新手在第5小时放弃?——资深架构师拆解3个致命认知盲区

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Lovable应用开发入门与环境搭建 Lovable 是一个面向现代 Web 应用的轻量级全栈框架&#xff0c;专为快速构建可维护、可扩展且富有表现力的交互式应用而设计。它融合了声明式 UI、响应式状态管理与内置服务抽…...

初创公司技术选型时为何将Taotoken作为大模型统一接入层

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 初创公司技术选型时为何将Taotoken作为大模型统一接入层 对于初创公司的技术负责人而言&#xff0c;在构建基于大模型的应用时&…...