下面的场景中是否有使用接口的设计指南?
我可以在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; }
}
答案 0 :(得分:5)
这取决于具体的界面及其逻辑关系。每种情况都没有通用的解决方案。你提到的2个选项在某些方面是正确的:
如果尽可能在编写良好的代码中,派生接口并同时实现父接口和子接口的情况很少见。你总是可以避免它。如果为类本身指定接口第二次,我没有看到任何问题。同时也没有利润。所以最好不要这样做。
重要提示:不要仅根据匹配的属性名称构建继承层次结构 - 它们可以巧合相同。在创建基类或接口之前,始终要考虑这是巧合还是固定关系。否则,您最终会遇到大量的界面,例如IDescription
,IName
,IID
等,这些界面并不意味着什么,只会使代码复杂化。
答案 1 :(得分:1)
如果说明属性在两种情况下都代表相同的语义对象,为了清楚起见,我会使用ISomeInterface实现IDescription。如果它们在你的设计中不一定是同一个东西,那么没有。
答案 2 :(得分:1)
设计指南基本上取决于这种情况下的要求。如果在 ISomewhere 中声明 Description ,那么您将被迫实现其他属性(在本例中为 Name ),即使在类,不需要 Name 属性。
另一方面,如果您将使用 ISomewhere 的所有类都需要Name和Description属性,那么最好在单个位置使用它 ISomeWhere
要获得更精确的答案,您需要分析这些界面的使用位置。