c# – 基类和显式类型检查的空方法
发布时间:2020-12-15 17:18:36 所属栏目:百科 来源:网络整理
导读:假设您有两种类型的对象,一种是从另一种派生而来的,但却添加了一个额外的功能.我可以想到处理这个额外功能的两种方法是在基类上添加一个空方法,该方法总是被调用(派生类可以覆盖此方法)或显式类型检查以查看是否有派生类的实例然后调用额外的方法. 这两个看
|
假设您有两种类型的对象,一种是从另一种派生而来的,但却添加了一个额外的功能.我可以想到处理这个额外功能的两种方法是在基类上添加一个空方法,该方法总是被调用(派生类可以覆盖此方法)或显式类型检查以查看是否有派生类的实例然后调用额外的方法.
这两个看起来都像黑客,有更好的方法吗?如果不是一个优先于另一个?两种方式都可以工作,但似乎都不是特别干净,一种方法是使用无用的方法存根来污染基类,另一种方法是使用显式类型检查,这通常被认为是一个坏主意. 这是一个清楚我的意思的例子: 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();
}
}
}
解决方法
最好将方法添加到基类而不是进行类型检查.如果你做了一个类型检查,然后决定实施一种还需要充电的新型武器,会发生什么?你会增加另一个测试条件吗?
编辑:在你的代码中,我看到Strategy Pattern的实现的开始.我想你的用例将从它和State Pattern获得很大的好处.如果你需要更多关于这些的详细信息,请留下评论(因为它们有点偏离最初的问题的观点) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 指向2D阵列的指针C,C
- ruby-on-rails – Heroku拒绝推动成熟应用程序(pre-receive
- fill_parent, wrap_content, match_parent的区别
- C#,有没有比IsWellFormedUriString更好的验证URL格式的方法
- ruby – Rails Active Record:在调用Save方法之前,调用构建
- 疯狂XML学习笔记(11)-----------XSLT讲解
- Flex AIR基础之标题栏更改
- 正则表达式入门教程(二)
- ruby-on-rails-3 – 如何在Ruby on Rails Heroku应用程序中
- reactjs – 与React Router 2匹配的单元测试路由
