gpt4 book ai didi

c# - 多个显式接口(interface)实现

转载 作者:太空狗 更新时间:2023-10-29 20:01:53 25 4
gpt4 key购买 nike

我有以下基本接口(interface)

public interface IBaseAction
{
bool CanAct(...)
}

还有两个继承接口(interface)说

public interface IAction1 : IBaseAction{}

public interface IAction2 : IBaseAction{}

我的问题是,我有一个实现两者的类,我想以不同的方式实现 CanAct。

public class ComplexAction : IAction1, IAction2
{
bool IAction1.CanAct(...){} //doesn't compile as CanAct is not a member of IAction1!!
}

ComplexAction c=new ComplexAction();
var a1 = (IAction1)c;
var a2 = (IAction2)c;
a1.CanSave(); //THESE TWO CALLS SHOULD BE IMPLEMENTED DIFFERENTLY
a2.CanSave();

是否有一种相当干净的方法来做到这一点?
(此外,我的接口(interface)具有语义含义和至少三个以上的功能,所以抛出整个层次结构是不可能的,但如果这是唯一的解决方案,我愿意将 bool CanAct 复制到每个继承接口(interface)(有4-6个))

最佳答案

如果有人调用 ((IBaseAction)a1).CanSave(),CLR 应该做什么? IBaseAction.CanSave() 可能只有一种实现。所以我认为你不能从概念上做到这一点。

这是多重继承的一个基本问题,称为 the diamond problem .底线是:如果你命中它,你的类型层次结构设计肯定是错误的。例如。在这种特殊情况下,您最好使用 Role class model (也称为角色模式)。

关于c# - 多个显式接口(interface)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6405284/

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