gpt4 book ai didi

c# - 如何用更丰富的类型覆盖接口(interface)方法中定义的参数?

转载 作者:行者123 更新时间:2023-11-30 13:59:40 24 4
gpt4 key购买 nike

我有这些:

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 的子类,但是每个这样的类都将绑定(bind)到一个玩家,因此这些子类中的方法(Manager 类)将特定于该播放器。换句话说,Roger 应该有他自己的 ScheduleFriendliesRafael 应该有他自己的。

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

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

但没有奢望:取消子管理器类并合并为一个(换句话说,我需要 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?
}
}

最佳答案

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

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)
{}
}

关于c# - 如何用更丰富的类型覆盖接口(interface)方法中定义的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12755439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com