Unity 3D游戏开发 - C#面向对象 | 多态之抽象类案例

抽象类编程案例

  • 使用抽象类结构实现 NPC 模块
    • 在游戏中会出现很多种不同用途的 NPC,这些 NPC有各自的存在价值和作用,同时又具备一些共性的东西。在开发 NPC 系统时,往往需要提取共性,独立出一个父类,然后子类继承父类,实现不同作用的 NPC。
    • 分析
      • 任务 NPC,商贩 NPC,铁匠 NPC,三种 NPC 的种类。
      • 共有属性:NPC 的名字,NPC 的类型。
      • 共有方法:都能和玩家交互(交谈)。
            //1.创建父类NPC.cs
            enum NPCType
            {
                Task,
                Shop
            }
            abstract class NPC
            {
                private string name;
                private NPCType type;
        
                public string Name
                {
                    get { return name; }
                    set { name = value; }
                }
        
                public NPCType Type
                {
                    get { return type; }
                    set { type = value; }
                }
        
                public NPC(string name, NPCType type)
                {
                    this.name = name;
                    this.type = type;
                }
        
                public abstract void Speak();
            }
        
        
                //2.创建子类:任务NPC  TaskNPC.cs
                private string taskInfo;
        
                public TaskNPC(string taskInfo, string name, NPCType type) : base(name, type) 
                {
                    this.taskInfo = taskInfo;
                }
        
        
                public override void Speak()   //此处抽象方法重写,在class TaskNPC:NPC 处,鼠标右键NPC --〉实现抽象类.
                {
                    Console.WriteLine("NPC:{0},任务:{1}", base.Name, taskInfo);
                }
        
        
            //3.创建子类:商人NPC ShopNPC.cs
            class ShopNPC:NPC
            {
                private string item;
        
                public ShopNPC(string item, string name, NPCType type):base(name, type)
                {
                    this.item = item;
                }
        
        
                public override void Speak()
                {
                    Console.WriteLine("NPC:{0},贩卖{1}", base.Name, item);
                }
            }
        
        
                    //4.主程序测试. Program.cs
                    TaskNPC npc1 = new TaskNPC("去野外挖2根萝卜", "小白兔", NPCType.Task);
                    npc1.Speak();
        
                    ShopNPC npc2 = new ShopNPC("食物", "商人", NPCType.Shop);
                    npc2.Speak();
        
                    Console.ReadKey();
        
        

虚方法抽象类语法对比

  • 整理

猜你喜欢

转载自blog.csdn.net/weixin_41232641/article/details/82717411