c#里氏替换

基本概念

里氏替换原则是面向对象七大原则中的重要的要则

概念

任何父类出现的地方 ,子类都可以替代

重点

语法表现 父类容器装子类对象,因为子类对象包含了父类的所有内容

++用父类容器装的子类对象,其本质仍然是子类的实例++

作用

方便进行对象存储和管理

基本实现

cs 复制代码
class GameObject
{

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

class Boss : GameObject
{
    public void BossAtk()
    {
        Console.WriteLine("Boss攻击");
    }
}


GameObject player = new Player();//用父类容器装载子类对象
GameObject monster = new Monster();//用父类容器装载子类对象
GameObject Boss = new Boss();//用父类容器装载子类对象

GameObject[] objects = new GameObject[] { new Player(), new Monster(), new Boss()};
//player.

is 和 as

is判断一个对象是否是指定类对象

bool :返回值 是为真,不是为假

as :将一个对象转换为指定类对象

返回值 :指定类型对象

成功返回执行类型对象 失败返回null

基本语法

类对象 is 类名 该语句块 会有一个bool true和false

类对象 as 类名 该语句块 会有一个对象返回值 对象和null

组合应用

通过父类引用只能访问父类中定义的成员,子类特有的成员无法直接访问。

如果需要访问子类特有的成员,必须进行类型转换(如 as 或强制转换)。

这是因为

编译时类型(静态类型)是父类,决定了可以访问哪些成员(只能访问父类定义的成员)。

运行时类型(实际类型)是子类,决定了多态行为(例如调用虚方法时执行子类的重写版本)。

相关推荐
leisoo80972 小时前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
不会代码的小猴2 小时前
21. 泛型编程上
开发语言·c++·笔记·算法
一只旭宝3 小时前
细讲C加加【9】C++ std::function与std::bind详解|仿函数、绑定器、类成员绑定、占位符、成员偏移指针
开发语言·c++·算法
椒颜皮皮虾྅4 小时前
OpenVINO C# API 3.3.1:支持OpenVINO 2026.3及GenAI增强
人工智能·c#·openvino
coder!mq5 小时前
说几个常见的语法糖?
java·开发语言·算法
gugucoding5 小时前
38. 【Java】Stream API(下):高级操作与性能
java·开发语言
Lhan.zzZ5 小时前
在 Visual Studio 2022 中打造可扩展的动态链接库模块:从零搭建到原理解析
开发语言·c++·visual studio
心平气和量大福大6 小时前
android-实例-蒲公英-更新与安装-5-签名与生成APK
android·java·开发语言
码哥DFS6 小时前
构造函数、实例对象、对象原型 ----三者关系
开发语言·javascript·原型模式
quantdash_cc6 小时前
告别自建 Requests/BS4 网页爬虫:基于 QuantDash 搭建零维保的高性能量化行情流水线
开发语言·爬虫·python·pandas·量化·quantdash