我有一个基本实体接口:
public interface IEntityBase
{
Guid id { set; get; }
}
现在我希望有一个实体,比如说SomeEntity,有2个功能,可选择和可移动。 Selectable和Movable都是实体,所以(逻辑上)应该实现IEntityBase。 但后来我无法像这样定义我的SomeEntity:
class SomeEntity : ISelectable, IMovable {};
因为我实施了两次IEntityBase :(
我找到的旁路不是在Selectable not Movable中实现IEntityBase,而是创建SomeEntity:
class SomeEntity : ISelectable, IMovable, IEntityBase {};
但我的胆量感觉很尴尬...... 还有其他解决方案吗?
答案 0 :(得分:0)
但是我不能像这样定义我的SomeEntity:
class SomeEntity : ISelectable, IMovable {};
因为我实施了两次IEntityBase :(
是的,你可以!这是界面的好处:他们allow diamond inheritance。
这里有一个小提琴来证明这个编译得很好:https://dotnetfiddle.net/qChku9
答案 1 :(得分:0)
即使class SomeEntity : ISelectable, IMovable {};
实施IMovable
,您也可以定义ISelectable
。接口只有声明,因此当不清楚应该实现什么方法时,不会出现模糊的情况。但是你可以明确地实现方法。