【C# 教程系列第 12 篇】抽象类的简单实现

这是【C# 教程系列第 12 篇】,如果觉得有用的话,欢迎关注专栏。

上一篇博客讲到了 C# 中的抽象类与抽象方法,对这两个概念不清楚的可以 点击此处

通过上篇博客我们会发现,使用 abstract 关键字表示类或成员是抽象的

抽象方法因为不提供具体的实现,所以没有方法体(一对大括号所包裹的内容),语句以分号结束。
抽象类仅对成员进行声明,但不提供实现代码,就等于设计了一个“空架子”,描绘一幅大致的蓝图,具体如何实现取决于派生类。
正因为抽象类自身不提供实现,所以不能进行实例化,调用没有实现代码的实例没有实际意义。

接着我们在代码中说明如何运用抽象类及抽象方法

这里我写一个表示所有球类的基类 Ball ,并把该类设置为抽象类。
在这个抽象类里有一个可以获取球类名称的抽象访问器,以及一个打球的抽象方法,代码如下

    public abstract class Ball
    {
        //获取球类的名称
        public abstract string GetName { get; }
        //打球
        public abstract void Play();
    }

这里的 GetName 属性返回某种球类的名称,如果是足球就返回“足球”,如果是篮球就返回“篮球”。
Play 方法会根据不同的派生类提供不同的实现,如果是足球,就输出“鸣人正在踢足球”,如果是篮球,就输出“佐助正在打篮球”,

接着我写一个足球类 FootBall 和一个篮球类 BasketBall ,并分别继承 Ball 抽象类。

(平常我会用到JB公司的插件 Resharper,把鼠标放到 FootBall类 后的 Ball 类上,这里按下 Alt+Enter 组合键可以快速实现抽象类,然后对生成的代码稍作修改即可)
最终的代码如下:

 //足球类
    public class FootBall : Ball
    {
        public override string GetName
        {
            get { return "足球"; }
        }
        public override void Play()
        {
            Debug.Log("鸣人正在踢足球");
        }
    }
    
    //篮球类
    public class BasketBall : Ball
    {
        public override string GetName
        {
            get { return "篮球"; }
        }
    
        public override void Play()
        {
            Debug.Log("佐助正在打篮球");
        }
    }

我们会注意到,实现抽象类的抽象成员也是使用 override 关键字与前面提到的成员覆写相似,实现抽象类,也可以看做是覆写基类的成员。

接着我在继承 MonoBehaviour 类的 Test 类中,写一个 PlayBall 的方法,参数为 Ball 类型的成员。如下代码所示

    public class Test : MonoBehaviour
    {
        public void PlayBall(Ball ball)
        {
            print("这是"+ball.GetName);
            ball.Play();
        }
    }

重头戏来了!!!
PlayBall 方法可以体现抽象类的用途,参数 ball 只声明为 Ball 类型,即定义的抽象类,这样的好处在于,不管调用方法传递进来的是什么类型的对象,只要是实现了 Ball 抽象类的类型即可。
抽象类 Ball 已经规范了派生类肯定存在的 GetName 属性和 Play 方法两个成员,很明显,这种处理方式比较灵活。

最后我在 Start 函数里分明声明足球类与篮球类的实例,并调用 PlayBall 方法,代码如下

    void Start()
   {
       //实例化
       FootBall footBall=new FootBall();
       BasketBall basketBall=new BasketBall();
       
       //足球实例当 PlayBall 方法的参数
       PlayBall(footBall);
       //篮球实例当 PlayBall 方法的参数
       PlayBall(basketBall);
   }

启动u3d,打印结果如下
在这里插入图片描述
Perfect!

ok, 抽象类的简单用途就介绍到这里。
各位,晚安!

你的问题得到解决了吗?欢迎在评论区留言。

赠人玫瑰,手有余香,如果觉得文章不错,希望可以给个一键三连,感谢。


结束语

技术是一点一点积累的,大神也不是一天就可以达到的。原地不动就是退步,所以每天进步一点点。

最后,附上一句格言:"好学若饥,谦卑若愚",望共勉。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Allen Su

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值