C#应该设计基类还是接口

设计规范:
1.IS-A关系和CAN-DO关系
IS-A关系:“属于”关系,继承基类的多个类之间有不少能共享的代码,比如:客车类型属于车辆类型;CAN-DO关系:指“能做某事”,继承接口的多个类之间没有多少能共享的代码。
如果派生类型和基类型建立不起IS-A关系,就不用基类而用接口,设计接口 就是在 定义协定。
2.易用性
定义从基类派生的新类型通常比实现接口里的所有方法容易很多,因为基类提供了大量功能,所以派生类型只需要稍微改动。
3.版本控制
向接口添加新方法,会强迫接口的所有继承者都必须更改其源代码来实现该新方法;而向基类中添加新方法,部分子类就不用更改源代码。

基类举例:
以Microsoft Windows窗体控件类为例:Button、CheckBox和其他所有窗体控件派生类都从System.Windows.Forms.Control窗体控件基类派生,再简单改下派生类的代码就可以了。

接口举例:
System.Collections.Generic命名空间里定义了几个与集合有关的接口:IList<T>, ICollection<T>, IEnumerable<T>,IDictionary<T>,然后,有大量类来实现这些接口的多种组合,包括:IList<T>, Dictionary<TKey, TValue>, Queue<T>, Stack<T>等集合类。这些类和这些接口之间是CAN-DO关系, 可理解为:IList<T>, Dictionary<TKey, TValue>, Queue<T>, Stack<T>等集合类之间没有多少能共享的代码。

猜你喜欢

转载自blog.csdn.net/BillCYJ/article/details/90761899