里氏替换原则

里氏替换原则是指,对于已经继承了父类的子类,可以用父类容器来装载子类对象,便于对象的管理与存储。而在需要执行子类内部的具体逻辑时,则搭配is与as关键字来使用。is关键字用于判断某个对象是否属于某个类,若是则返回True,否则返回False;as关键字用于将某个对象转换为某个类内的对象,若转换成功,则返回转换成对应类的对象,若转换失败则返回null。

cs 复制代码
namespace ConsoleApp5
{
    class GameObject { }

    class Player : GameObject 
    {
        public void PlayerAtk() 
        {
            Console.WriteLine("玩家攻击");
        }
    }
    class Monster : GameObject 
    {
        public void MonsterAtk()
        {
            Console.WriteLine("怪物攻击");
        }
    }

    class Boss : GameObject
    {
        public void BossAtk()
        {
            Console.WriteLine("Boss攻击");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            //里氏替换
            GameObject player = new Player();
            GameObject monster = new Monster();
            GameObject boss = new Boss();

            GameObject[] objects = new GameObject[] { new Player(),new Monster(),new Boss()};
            //利用is与as搭配使用,先判断对象是否属于,在转换为对应对象并调用对应方法
            for (int i = 0; i < objects.Length; i++)
            {
                if (objects[i] is Player)
                {
                    Player p = objects[i] as Player;
                    p.PlayerAtk();
                    //也可写作(objects[i] as Player).PlayerAtk()
                }
                else if (objects[i] is Monster)
                {
                    (objects[i] as Monster).MonsterAtk();
                }
                else if (objects[i] is Boss)
                {
                    (objects[i] as Boss).BossAtk();
                }
            }
        }
    }
}
相关推荐
小熊恋旧37 分钟前
Python 面向对象编程:方法、属性、继承与多态详解
开发语言·python
云边云科技_云网融合38 分钟前
面向汽车零部件制造业场景的解决方案 | 70 秒:一台车下线的时间里,藏着五张网
开发语言·汽车·php
Evand J38 分钟前
【PMSM滤波例程2】PMSM未知负载转矩观测EKF。MATLAB例程(负载增广EKF与实际仿真结果)。附下载链接
开发语言·matlab·电机
will_net1 小时前
apollo 站点部署&C#接入
开发语言·c#·apollo
晗夜未央2 小时前
任务队列反复失败,先分清重试、阻塞和结果待核对
开发语言·javascript
熊猫钓鱼>_>2 小时前
四种书签,一条时间线:一个读书 App 的记忆颗粒与它的边界案例【鸿蒙心迹】
开发语言·华为·ai编程·harmonyos·鸿蒙·openharmony·鸿蒙pc
努力努力再努力wz2 小时前
【Lua 入门系列】Lua 函数深入理解:函数对象、多返回值、可变参数、闭包、递归与尾调用优化
开发语言·lua
飞浪纪元[FWC–FE]3 小时前
从零到一键绿:Qt 5.14.2 + VS2019 开发环境搭建、Kit 套件配置与构建错误修复完全手册
开发语言·qt
Wang's Blog3 小时前
Java 项目实战:交友项目 - 联系人列表
java·开发语言·交友
我命由我123453 小时前
访客系统形式(有用户概念、无用户概念)
java·开发语言·前端·javascript·python·产品运营·产品经理