C#从零开始学习(继承)(6)

embedded/2024/10/21 23:42:55/

本章所有的代码都放在
https://github.com/hikinazimi/head-first-Csharp

使用冒号继承一个基类,子类扩展一个基类时,他会继承它的成员:也就是基类中的所有字段,属性和方法,他们会自动增加到子类

子类覆盖方法改变它继承的成员

  1. 基类中的方法增加virtual关键字
  2. 子类同名方法增加override关键字

子类使用base关键字访问它的基类

class Chamleon : Vwrtebrate
{public override void Eat(Food morsel){base.Eat(morsel);//调用基类方法}
}

基类有有构造器时,子类需要调用这个基类的构造器

  • 一个子类覆盖其基类中的一个方法时,总是调用子类中定义更特定的版本

抽象类

abstract class

  1. 抽象类可以有不完整的占位属性和方法,如一个属性只定义存储方法没有给出定义方法
  2. 只有抽象类才可以有抽象方法
  3. 抽象类不可以实例化

C#不允许多重继承

蜂巢管理系统

有一个Bee基类,4个继承的子类Queen,NectarCollector,HoneyManufacturer,EggCare
还有一个HoneyVault静态类,跟踪蜂巢的蜂蜜和花露

HoneyVaultr类,蜜蜂调用ConsumeHoney类消耗蜂蜜完成工作


namespace BeehiveManagementSystem
{class HoneyVault{public const float NECTAR_CONVERSION_RATIO = 0.19f;public const float LOW_LEVEL_WARNING = 10f;private static float honey = 25f;private static float nectar = 100f;public static void CollectNectar(float amount){if (amount > 0) nectar += amount;}public static void ConvertNectarToHoney(float amount){float nectarToHoney = amount;if (nectarToHoney > nectar) nectarToHoney = nectar;nectar -= nectarToHoney;honey += nectarToHoney * NECTAR_CONVERSION_RATIO;}public static bool ConsumeHoney(float amount){if (honey >= amount){honey -= amount;return true;}else{return false;}}public static string StatusReport{get{string status = $"{honey:0.0} units of honey\n" +$"{nectar:0.0} units of nectar";string warnings = "";if (honey < LOW_LEVEL_WARNING) warnings +="\nLOW HONEY - ADD A HONEY MANUFACTURER";if (nectar < LOW_LEVEL_WARNING) warnings +="\nLOW NECTAR - ADD A NECTAR COLLECTOR";return status + warnings;}}}
}

Bee为基类,我们希望它不被创建,所以使用abstract 创建


namespace BeehiveManagementSystem
{abstract class Bee{public abstract float CostPerShift { get; }public string Job { get; private set; }public Bee(string job){Job = job;}public void WorkTheNextShift(){if (HoneyVault.ConsumeHoney(CostPerShift)){DoJob();}}protected abstract void DoJob();}
}

机制-动态-美感框架(MDA)是一个用来理解游戏很好的工具
整个应用在一个反馈循环中

至此,我们就学习完了第六章,然后让我们复习一下本章讲了什么

  • 如何使用继承
  • 子类继承基类的方法和特性
  • 抽象类
  • 游戏设计方法(MDA)

http://www.ppmy.cn/embedded/129398.html

相关文章

自动化运维:高效IT管理的未来

自动化运维&#xff1a;高效IT管理的未来 在信息技术日新月异的时代&#xff0c;你是否曾思考过&#xff0c;为什么许多企业面临的运维挑战日益严峻&#xff1f;传统的运维方式&#xff0c;像是使用手动工具修理老旧机器&#xff0c;既耗时又容易出错。随着企业对高效、安全的…

docker harbor

文章目录 一&#xff0c;搭建私有仓库1.1下载registry1.2在 daemon.json 中添加私有镜像仓库地址1.3重新加载重启docker1.4运行容器1.5拉取一个centos7镜像1.6给镜像加标签1.7上传镜像1.8显示私有仓库的所有镜像1.8查看私有仓库的 centos 镜像有哪些tag 二&#xff0c;什么是ho…

Go Wails 学习笔记:创建第一个项目

文章目录 1. 安装 Wails2. 创建 Wails 项目3. 项目结构4. 运行项目5. 构建项目6. 部署和发布总结 Wails 是一个用于构建跨平台桌面应用程序的框架&#xff0c;允许开发者使用前端技术&#xff08;如 HTML、CSS、JavaScript&#xff09;以及 Go 语言来开发桌面应用。本文基于官方…

C语言 sizeof 的介绍,以及sizeof计算数组名、 数组首地址、数组的元素之间的区别

一、sizeof 介绍 sizeof 是 C 语言中的一个运算符&#xff0c;用于计算数据类型或变量在内存中占用的字节数。用于计算数据类型或变量所占的内存大小&#xff0c;以字节为单位。它可以在编译时计算其操作数的大小&#xff0c;并返回一个 size_t 类型的值。它可以帮助了解不同类…

168K+ Star!AutoGPT:一个构建、部署和运行AI代理的强大平台

AutoGPT 简介 AutoGPT[1] 是一个强大的平台&#xff0c;它允许用户创建、部署和管理持续运行的AI代理&#xff0c;以自动化复杂的工作流程。 该项目的使命是提供工具&#xff0c;让用户能够专注于重要的事情。 项目特点 主要特点 Agent Builder&#xff1a;一个直观的低代码…

【git】如何快速准确的回退(revert)已经合并(merge)主分支(master)的新提交代码

文章目录 前言一、merge模式二、回滚步骤总结 前言 我们在做一些需求&#xff0c;正常流程经过开发&#xff0c;测试到最后和代码上线。但是有时候就会发生一些小插曲&#xff0c;比如产品说老板说某某某你的代码要延后上线&#xff01;&#xff01;或者你写的不合格预发环境出…

配电系统 无线测温装置组成架构分析

随着全球对电力需求的不断增长&#xff0c;现代配电系统面临着越来越高的安全性和效率要求。在这一背景下&#xff0c;无线测温系统的引入为配电系统的监测和管理带来了新的解决方案。无线测温系统通过实时监测设备的温度状态&#xff0c;帮助运维人员及时发现潜在问题&#xf…

AWS WAF实战指南:从入门到精通

1. 引言 Amazon Web Services (AWS) Web Application Firewall (WAF) 是一款强大的网络安全工具,用于保护Web应用程序免受常见的Web漏洞攻击。本文将带您从入门到精通,深入探讨AWS WAF的实际应用策略,并提供具体案例,帮助您更好地保护您的Web应用程序。 2. AWS WAF基础 …