里氏替换原则

里氏替换原则是指,对于已经继承了父类的子类,可以用父类容器来装载子类对象,便于对象的管理与存储。而在需要执行子类内部的具体逻辑时,则搭配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();
                }
            }
        }
    }
}
相关推荐
এ慕ོ冬℘゜12 小时前
JavaScript 数组核心方法实战|新增元素 + 数组转字符串 零基础详解
开发语言·javascript·ecmascript
一个初入编程的小白12 小时前
C语言:函数栈帧与销毁
c语言·开发语言
czhc114007566312 小时前
718:public internl class;partial []
开发语言
临床数据科学和人工智能兴趣组12 小时前
R语言因其强大的统计功能、灵活的编程环境、活跃的社区支持和强大的R扩展包,迅速成为统计学和数据科学领域的首选工具之一
开发语言·数据分析·r语言·r语言-4.2.1
__log13 小时前
弱网环境下的“生命线“:从AI流式响应到大文件上传的稳定性
开发语言·人工智能·php
巧克力男孩dd13 小时前
Python超典型练习题(第一次作业)
开发语言·python·算法
TlSfoward13 小时前
TLSFOWARD TLS指纹
开发语言·数据库·爬虫·搜索引擎·https·php
闲猫14 小时前
LangChain / Core components / Models
开发语言·python·langchain
-银雾鸢尾-15 小时前
C#中的索引器
开发语言·c#