我有这些:
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>(T player) where T : TennisPlayer;
}
public class RafaelNadalManager : Manager
{
protected override bool ScheduleFriendlies<T>(T player)
{
//but how do I enforce the caller that only RafaelNadal object can be
//passed to this but not RogerFederer?
}
}