私はこれらを持っています:
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
が、そのようなクラスはすべて1人のプレーヤーに関連付けられるため、それらの子クラス(Manager
クラス)のメソッドはそのプレーヤーに固有のものになります。言い換えれRoger
ば、彼自身を持つべきであるScheduleFriendlies
一方で、彼自身をRafael
持つべきです。
どうすればいいですか?別の設計でも構いませんが、次の点に注意してください。
私が変更できるもの:継承、そのルートなど
ただし、子マネージャー クラスを削除して 1 つにマージする余裕はありません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?
}
}