c# – 多个显式接口实现

我有以下基本界面

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

和两个继承接口说

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();

有一个相当干净的方式来做到这一点?
 (另外,我的界面具有语义和至少三个函数,因此抛弃整个层次结构是不可能的,但是我愿意将bool CanAct复制到每个继承接口,如果这是唯一的解决方案(其中有4-6个))

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

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

转载注明原文:c# – 多个显式接口实现 - 代码日志