如何覆盖更丰富类型的接口方法中定义的参数?
我有这些:
public class TennisPlayer { } public class RogerFederer : TennisPlayer { } public class RafaelNadal : TennisPlayer { }
然后我有一些方法类,如下所示:
public abstract class Manager { protected abstract void ScheduleFriendlies(TennisPlayer player); } public class RafaelNadalManager : Manager { public void ScheduleFriendlies(RafaelNadal rn) { //throw new NotClayException(); } } public class RogerFedererManager : Manager { public void ScheduleFriendlies(RogerFederer rf) { //throw new NotGrassException(); } } //'RafaelNadalManager' does not implement inherited abstract member 'Manager.ScheduleFriendlies(TennisPlayer)'
我想要实现的是我想要拥有Manager
子类,但是每个这样的类都将绑定到一个玩家,因此这些子类( Manager
类)中的方法将特定于该玩家。 换句话说, Roger
应该拥有自己的ScheduleFriendlies
而Rafael
应该拥有自己的。
我该怎么做? 替代设计会做,但请记住:
我能改变的是 :遗产,路线等
但是不要奢侈 :取消子管理器类并合并为一个(换句话说,我需要RogerFederer
和RogerFedererManager
作为单独的类)。
我试过这个 :
public abstract class Manager { protected abstract bool ScheduleFriendlies(T player) where T : TennisPlayer; } public class RafaelNadalManager : Manager { protected override bool ScheduleFriendlies(T player) { //but how do I enforce the caller that only RafaelNadal object can be //passed to this but not RogerFederer? } }
你很接近,但你需要类generics,而不仅仅是方法:
public abstract class Manager where T : TennisPlayer { protected abstract bool ScheduleFriendlies(T player); }
然后你可以使用:
public class RafaelNadalManager : Manager { protected override bool ScheduleFriendlies(RafaelNadal player) {} }