C#接口设计指南,接口实现接口

时间:2014-07-01 16:00:15

标签: c# interface

下面的场景中是否有使用接口的设计指南?

可以在DerivedClass或ISomeInterface接口或两者中声明IDescription。 3个选择,哪些指导方针可以帮助我确定最佳选择。

public interface IDescription
{
    String Description { get; }
}

public interface ISomeInterface
{
    String Name { get; }
    String Description { get; }
}

public class DerivedClass : Base, ISomeInterface, IDescription
{
    public String Description { get; private set; }
}

3 个答案:

答案 0 :(得分:5)

这取决于具体的界面及其逻辑关系。每种情况都没有通用的解决方案。你提到的2个选项在某些方面是正确的:

  • 如果接口不相关(例如IDisposable和IEnumerable),那么该类最好实现两个不相关的接口。
  • 如果接口相关。例如IClientAPI和IAdminAPI,那么管理界面可以从客户端的界面派生,因为管理员可以做普通用户可以做的一切,还有一些额外的操作。

如果尽可能在编写良好的代码中,派生接口并同时实现父接口和子接口的情况很少见。你总是可以避免它。如果为类本身指定接口第二次,我没有看到任何问题。同时也没有利润。所以最好不要这样做。

重要提示:不要仅根据匹配的属性名称构建继承层次结构 - 它们可以巧合相同。在创建基类或接口之前,始终要考虑这是巧合还是固定关系。否则,您最终会遇到大量的界面,例如IDescriptionINameIID等,这些界面并不意味着什么,只会使代码复杂化。

答案 1 :(得分:1)

如果说明属性在两种情况下都代表相同的语义对象,为了清楚起见,我会使用ISomeInterface实现IDescription。如果它们在你的设计中不一定是同一个东西,那么没有。

答案 2 :(得分:1)

设计指南基本上取决于这种情况下的要求。如果在 ISomewhere 中声明 Description ,那么您将被迫实现其他属性(在本例中为 Name ),即使在类,不需要 Name 属性。

另一方面,如果您将使用 ISomewhere 的所有类都需要Name和Description属性,那么最好在单个位置使用它 ISomeWhere

要获得更精确的答案,您需要分析这些界面的使用位置。