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
{
受保护的覆盖布尔时间表友谊赛(拉斐尔纳达尔球员)
{}
}
在你回答之前,我几乎在我的代码中完成了,是的,我在那里!:)