gpt4 book ai didi

c# - 无法在 C# 中将子接口(interface)作为参数传递

转载 作者:太空宇宙 更新时间:2023-11-03 18:03:30 24 4
gpt4 key购买 nike

我有以下接口(interface)层次结构:

public interface IActor { ... }
public interface IHealthUser : IActor { ... }

第三个接口(interface):
public interface IAction { void Perform(IActor caster) }

为什么以下内容不合法,我可以以某种方式解决它吗?
public class HealthPotion : IAction
{
public void Perform(IHealthUser caster) { ... }
}

最佳答案

IAction 定义的契约(Contract)声明您可以 Perform对任何 IActor 的操作.任何 Actor 。不仅IHealthUser .你的HealthPotion试图做的只是实现 IAction 的一个子集, 意味着只在 IActor 的一个子集上执行它的任务s。这不是 IAction界面状态。

如果你想要一个特定的 IAction能够限制 IActor 的类型它适用于,您可以使用通用约束来做到这一点:

public interface IAction<TAppliesTo> where TAppliesTo : IActor
{
void Perform(TAppliesTo appliesTo);
}

public class UniversalAction : IAction<IActor>
{
public void Perform (IActor anyone) {}
}

public class HealthPotion : IAction<IHealthUser>
{
public void Perform (IHealthUser healthUserOnly){}
}

关于c# - 无法在 C# 中将子接口(interface)作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41800944/

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