c# – 基类和显式类型检查的空方法

c# – 基类和显式类型检查的空方法,第1张

概述假设您有两种类型的对象,一种是从另一种派生而来的,但却添加了一个额外的功能.我可以想到处理这个额外功能的两种方法是在基类上添加一个空方法,该方法总是被调用(派生类可以覆盖此方法)或显式类型检查以查看是否有派生类的实例然后调用额外的方法. 这两个看起来都像黑客,有更好的方法吗?如果不是一个优先于另一个?两种方式都可以工作,但似乎都不是特别干净,一种方法是使用无用的方法存根来污染基类,另一种方法是使用 假设您有两种类型的对象,一种是从另一种派生而来的,但却添加了一个额外的功能.我可以想到处理这个额外功能的两种方法是在基类上添加一个空方法,该方法总是被调用(派生类可以覆盖此方法)或显式类型检查以查看是否有派生类的实例然后调用额外的方法.

这两个看起来都像黑客,有更好的方法吗?如果不是一个优先于另一个?两种方式都可以工作,但似乎都不是特别干净,一种方法是使用无用的方法存根来污染基类,另一种方法是使用显式类型检查,这通常被认为是一个坏主意.

这是一个清楚我的意思的例子:

public class Weapon{    // Should there be an empty StartCharging() here?    public virtual voID Fire()    {        // Do something    }}public class ChargeDWeapon : Weapon{    public voID StartCharging()    {        // Do something    }    public overrIDe voID Fire()    {        // Do something        base.Fire();    }}public class Game{    private Weapon weapon;    public voID HandleUserinput()    {        if (Mousebutton.Waspressed())        {            // Or should there be an if (weapon is ChargeDWeapon) here            weapon.StartCharging();        }        else if (Mousebutton.WasReleased())        {            weapon.Fire();        }    }}
解决方法@H_419_19@ 最好将方法添加到基类而不是进行类型检查.如果你做了一个类型检查,然后决定实施一种还需要充电的新型武器,会发生什么?你会增加另一个测试条件吗?

编辑:在你的代码中,我看到Strategy Pattern的实现的开始.我想你的用例将从它和State Pattern获得很大的好处.如果你需要更多关于这些的详细信息,请留下评论(因为它们有点偏离最初的问题的观点)

总结

以上是内存溢出为你收集整理的c# – 基类和显式类型检查的空方法全部内容,希望文章能够帮你解决c# – 基类和显式类型检查的空方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1233722.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存