我的问题可能会有点愚蠢,但是我真的想知道为什么以这样的方式设计集合层次结构:它包含接口和类,而可能只是类,或者在顶层和其余类中只有一个接口。
有人可以向我解释原因吗?
答案 0 :(得分:1)
请考虑,如果仅定义IList
接口,则需要类来实现它。 List
只是这样的一种实现,如果可以的话,则默认为实现。
另一方面,如果您只有一个列表作为抽象类(即没有IList
接口),则所有自定义列表集合类都必须继承。我想说这将是一个错误的设计选择,因为IList
的成员更适合合同(单个添加/删除方法可以具有不同的实现,例如优先级列表等)。通过将List用作抽象类,可以强迫和控制人们的设计选择。
此外,在C#中,您还将受到约束,无法从其他任何类继承自定义集合。
基本上,您应该尝试查看接口和抽象类提供的不同功能。那会让您意识到IList和List之间的区别。
答案 1 :(得分:1)
每个类只能从一个类派生,而可以从多个接口派生。
我们为什么需要多个接口?
通常,有两个原因使我们为一个类 1提供多个接口。一类可以有不同类型的行为, 2。开闭原则。
接口的简短定义是:接口是一个实体,它确定派生类必须如何行为,并且由于行为的类型不同,因此每个类可能需要不同的接口。
此外,根据SOLID的第二个原则,即开放式-封闭式原则的缩写,这意味着即使您想向实体添加新的行为(例如CanBark
),实体也必须为扩展而开放,而为修改而封闭。特定的类,并且作为该类的父类,您已经具有一个与此相关的接口(IDogActions
),因此建议您不要修改IDogActions
接口,因为可能还有许多其他类在实现该接口,并且不需要执行新操作,而是可以创建一个新接口(例如IDogAuditoryActions
)。