如何使用多个功能扩展EntityBase?

时间:2016-08-21 13:41:06

标签: c#

我有一个基本实体接口:

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

但我的胆量感觉很尴尬...... 还有其他解决方案吗?

2 个答案:

答案 0 :(得分:0)

  

但是我不能像这样定义我的SomeEntity:

     

class SomeEntity : ISelectable, IMovable {};

     

因为我实施了两次IEntityBase :(

是的,你可以!这是界面的好处:他们allow diamond inheritance

这里有一个小提琴来证明这个编译得很好:https://dotnetfiddle.net/qChku9

答案 1 :(得分:0)

即使class SomeEntity : ISelectable, IMovable {};实施IMovable,您也可以定义ISelectable。接口只有声明,因此当不清楚应该实现什么方法时,不会出现模糊的情况。但是你可以明确地实现方法。