C# 如何用更丰富的类型重写接口方法中定义的参数?

C# 如何用更丰富的类型重写接口方法中定义的参数?,c#,inheritance,arguments,overriding,base-class,C#,Inheritance,Arguments,Overriding,Base Class,我有: public class TennisPlayer { } public class RogerFederer : TennisPlayer { } public class RafaelNadal : TennisPlayer { } 然后我有一些带有方法的类,比如: public abstract class Manager { protected abstract void ScheduleFriendlies(TennisPlayer player); }

我有:

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?
    }
}
公共抽象类管理器
{
受保护的抽象布尔调度友谊(T player),其中T:TennisPlayer;
}
公共类RafaelNadalManager:经理
{
受保护的覆盖布尔调度友谊赛(T播放器)
{
//但是我如何强制调用方只能使用RafaelNadal对象呢
//传给这个,但不是罗杰费德勒?
}
}

您很接近,但您需要的是类generic,而不仅仅是方法:

public abstract class Manager<T> where T : TennisPlayer
{
    protected abstract bool ScheduleFriendlies(T player);
}
公共抽象类管理器,其中T:TennisPlayer
{
受保护的抽象布尔调度(T-player);
}
然后,您可以使用:

public class RafaelNadalManager : Manager<RafaelNadal>
{
     protected override bool ScheduleFriendlies(RafaelNadal player)
     {}
}
公共类RafaelNadalManager:Manager
{
受保护的覆盖布尔时间表友谊赛(拉斐尔纳达尔球员)
{}
}

在你回答之前,我几乎在我的代码中完成了,是的,我在那里!:)