c#接口设计指南,接口实现接口
本文关键字:接口 实现 | 更新日期: 2023-09-27 18:11:11
是否有以下场景中使用接口的设计指南?
我可以在派生类或接口ISomeInterface或两者中声明iddescription。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; }
}
这取决于具体接口及其逻辑关系。没有适用于所有情况的通用解决方案。你提到的两个选项在某些情况下是正确的:
- 如果接口不相关(例如IDisposable和IEnumerable),那么最好实现两个不相关的接口。
- 接口相关。例如,IClientAPI和IAdminAPI,那么管理员接口可能是从客户端接口派生出来的,因为管理员可以做普通用户可以做的一切,加上一些额外的操作。
在编写良好的代码中,如果可能的话,接口派生并同时实现父接口和子接口的情况很少。你总是可以避免的。如果您第二次为类本身指定接口,我不认为有任何问题。同时也没有利润。所以最好不要这么做。
重要提示:不要仅仅基于匹配的属性名来构建继承层次——它们可能只是巧合。在创建基类或接口之前,一定要考虑这是巧合还是固定关系。否则你最终会得到大量的接口,如IDescription
, IName
, IID
等,这没有任何意义,只会使代码复杂化。
如果description属性在两种情况下表示相同的语义对象,那么为了清晰起见,我会让ISomeInterface实现iddescription。如果它们在你的设计中不一定是相同的东西,那么没有
在这种情况下,设计指南基本上取决于需求。如果你在 iswhere 中声明了Description,那么即使在不需要Name属性的类中,你也将被迫实现它的其他属性(在本例中是Name)。另一方面,如果所有使用ISomewhere的类都需要Name和Description属性,那么最好在单个位置使用ISomewhere。
要得到更精确的答案,您需要分析这些接口将在何处使用。