4

我有这些:

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

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

我可以改变的:继承,它的路线等

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

我试过这个

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?
    }
}
4

1 回答 1

9

你很接近,但你需要类泛型,而不仅仅是方法:

public abstract class Manager<T> where T : TennisPlayer
{
    protected abstract bool ScheduleFriendlies(T player);
}

然后你可以使用:

public class RafaelNadalManager : Manager<RafaelNadal>
{
     protected override bool ScheduleFriendlies(RafaelNadal player)
     {}
}
于 2012-10-05T23:53:06.700 回答