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

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

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

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

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

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

csharp 复制代码
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类消耗蜂蜜完成工作

csharp 复制代码
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 创建

csharp 复制代码
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)
相关推荐
week_泽1 小时前
第4课:为什么记忆能力如此重要 - 学习笔记_4
人工智能·笔记·学习·ai agent
week_泽2 小时前
第6课:如何管理短期记忆和长期记忆 - 学习笔记_6
人工智能·笔记·学习·ai agent
map_vis_3d3 小时前
JSAPIThree 加载简单点图层学习笔记:SimplePoint 散点可视化
笔记·学习·信息可视化·mapvthree·jsapithree·simplepoint·点图层
西瓜堆8 小时前
提示词工程学习笔记: 工程技术行业提示词推荐
笔记·学习
阿蒙Amon9 小时前
C#每日面试题-Array和ArrayList的区别
java·开发语言·c#
charlie11451419111 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式
好奇龙猫11 小时前
【AI学习-comfyUI学习-三十二节-FLXU原生态反推+controlnet depth(UNion)工作流-各个部分学习】
人工智能·学习
i橡皮擦12 小时前
TheIsle恐龙岛读取游戏基址做插件(C#语言)
开发语言·游戏·c#·恐龙岛·theisle
好奇龙猫12 小时前
【大学院-筆記試験練習:数据库(データベース問題訓練) と 软件工程(ソフトウェア)(7)】
学习
j_jiajia12 小时前
(一)人工智能算法之监督学习——KNN
人工智能·学习·算法