[C#复习向整合]多态

本文介绍了C#中的多态性概念,包括静态多态(函数重载和运算符重载)和动态多态(通过virtual、override关键字实现)。通过示例展示了多态如何导致对象性破坏,并提供了修复这一问题的方法。文章还探讨了如何利用多态性在GameObject类及其子类Player和Boss中实现不同的Atk()方法,确保在调用时能够根据对象的实际类型执行相应的方法。
摘要由CSDN通过智能技术生成

一.多态的概念

让继承同一父类的子类们,在执行相同方法时有不同的表现.

函数重载,运算符重载是静态多态性.

virtual

override

base

简称vob

若没有多态的弊端:

class Father
{
    public void SpeakName()
    {

    }
}
class Son : Father
{
    public new void SpeakName()//重写父类方法,可以不加new,但编译器会提示你
    {
        
    }
}


//使用例
Father f = new Son();

f.SpeakName();//调用父类方法

(f as Son).SpeakName();//调用子类方法

//f又能用父类方法,又能有子类方法,破坏了对象性,是我们希望避免的!

二.利用多态

class GameObject
{
    public virtual void Atk()
    {
        //虚函数可以被子类重写
    }
}
class Player : GameObject
{
    public override Atk()
    {
        //子类重写虚函数
        //base.Atk();//这句话可以保留父类行为
    }
}
class Boos : GameObject
{
    public override Atk()
    {
        //子类重写虚函数
        //base.Atk();//这句话可以保留父类行为
    }
}



//使用时
GameObject p = new Player();//new什么类,就执行什么类的重写
GameObject b = new Boos();

p.Atk();//调用Player的Atk(),而不是父类的,可以对比上一个例子区别.
b.Atk();

参考资料<唐老狮C#教程>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值