如何覆盖更丰富类型的接口方法中定义的参数?

我有这些:

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应该拥有自己的ScheduleFriendliesRafael应该拥有自己的。

我该怎么做? 替代设计会做,但请记住:

我能改变的是 :遗产,路线等

但是不要奢侈 :取消子管理器类并合并为一个(换句话说,我需要RogerFedererRogerFedererManager作为单独的类)。

我试过这个

 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) {} }