C#接口与继承入门

本文介绍了C#中的接口与继承概念,通过英雄联盟英雄技能的例子展示了如何使用接口和基类。英雄接口用于定义技能,而英雄基类用于实现共享属性如血量和蓝条。文中讨论了virtual关键字的作用,以及子类如何override或使用new关键字处理父类成员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

英雄联盟里每个英雄有四个技能:

public interface IHero 
{
    void SkillQ();
    void SkillW();
    void SkillE();
    void SkillR();
}

然后每个英雄的技能有不同的名称,如盖伦和拉克丝,这两个英雄就能继承自英雄接口:

public class Garen : IHero
{
    public void SkillE()
    {
        Debug.Log("Judgment");
    }

    public void SkillQ()
    {
        Debug.Log("Decisive Strike");
    }

    public void SkillR()
    {
        Debug.Log("Demacian Justice");
    }

    public void SkillW()
    {
        Debug.Log("Courage");
    }
}

public class Lux : IHero
{
    public void SkillE()
    {
        Debug.Log("Lucent Singularity");
    }

    public void SkillQ()
    {
        Debug.Log("Light Binding");
    }

    public void SkillR()
    {
        Debug.Log("Prismatic Barrier");
    }

    public void SkillW()
    {
        Debug.Log("Final Spark");
    }

这时我们生成一个英雄就可以直接声明接口然后实例化具体的英雄:

void Start()
    {
        IHero myHero = new Garen();              //接口声明,类实例化
        myHero.SkillQ();
    }

嘿嘿嘿,盖伦来砍人,沉默了。
但是接口呢,是不能含有具体字段的,那比如说英雄有一些共有的属性比如血量蓝条等,就可以用英雄基类来实现:

public class BaseHero : IHero
{
    public int hp = 100;

    public virtual void SkillE()
    {
        Debug.Log("E");
    }

    public virtual void SkillQ()
    {
        Debug.Log("Q");
    }

    public virtual void SkillR()
    {
        Debug.Log("R");
    }

    public virtual void SkillW()
    {
        Debug.Log("W");
    }
}

发现这时我们的成员函数都变成virtual了,变成virtual后我们子类对象能够override父类对象,同时父类对象也能输出。如果我们不使用virtual,就必须在子类对象里使用new,但是会遮盖父类对象。

这时我们的main函数为

 BaseHero myHero = new Garen();              //接口声明,类实例化
 myHero.SkillQ();
 Debug.Log(myHero.hp);

在这里插入图片描述
盖哥还是强的啊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值