首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#接口设计指南,实现接口的接口

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

Stack Overflow用户
提问于 2014-07-01 16:00:14
回答 3查看 689关注 0票数 0

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

我可以在IDescription中声明DerivedClass,或者在ISomeInterface接口中声明,或者两者都声明。3选择,什么样的指导原则将帮助我决定哪一个是最好的。

代码语言:javascript
复制
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; }
}
EN

回答 3

Stack Overflow用户

发布于 2014-07-01 16:07:32

依赖于具体的接口和它们的逻辑关系。没有针对每一种情况的普遍解决办法。你提到的2种选择在某些情况下是正确的:

  • 如果接口不相关(例如IDisposable和IEnumerable),那么该类最好实现两个不相关的接口。
  • 如果接口是相关的。例如,IClientAPI和IAdminAPI,那么管理界面可能从客户端的接口派生出来,因为管理员可以完成正常用户所能做的一切,再加上一些额外的操作。

如果接口派生并同时实现父接口和子接口,那么这种情况在编写得很好的代码中是非常罕见的。你总是可以避免的。如果您第二次为类本身指定接口,我看不出任何问题。同时,也没有利润。所以最好别这么做。

重要注意事项:不只是基于匹配的属性名称构建继承层次结构--它们可能是巧合的。在创建基类或接口之前,始终要考虑这是否是巧合或固定关系。否则,您将得到大量的接口,如IDescriptionINameIID等,这并不意味着任何事情,只会使代码变得复杂。

票数 5
EN

Stack Overflow用户

发布于 2014-07-01 16:06:07

如果description属性在这两种情况下都表示相同的语义对象,那么为了清楚起见,我将让ISomeInterface实现IDescription。如果它们在你的设计中不一定是一样的,那就不是。

票数 1
EN

Stack Overflow用户

发布于 2014-07-01 16:07:54

在这种情况下,设计准则基本上取决于需求。如果您在ISomewhere中声明了描述,那么您将被迫实现它的其他属性(在本例中是Name),甚至在不需要Name属性的类中也是如此。

另一方面,如果要使用ISomewhere的所有类都需要名称和描述属性,那么最好在单一位置ISomeWhere中使用它。

为了得到更精确的答案,您需要分析这些接口的使用位置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24514710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档