C#类设计时,何时用类继承(Base Class)何时用接口(Interface)

简介:
Base class 和 Interface的使用,有时很容易判断,有时又很难区分。
1)二者的主要区别:Base class 体现了“IS A”的关系,而Interface体现的是“CAN DO”的关系。因为C#不允许多重继承(Multi-inherit),所以,如果派生的类不能正确的反映IS-A的关系,就不要使用基类;而如果不同的类或对象(Type)包含了同样的CAN-DO的功能,那么就用接口。另外,值类型(Value type)只能使用接口,不能使用Base Class;
2)相比Interface,使用Base Class的有点:
  i)使用方便(Easy of use):基类提供了大量现成的方法、功能,子类可以直接使用;而使用接口时,必须定义接口规定的所以的成员;
  ii)执行稳定(consistent implementation): 不管关于接口的文档的描述有多么完善,其他人(第三方)在根据接口完善类时,也都会遇到很多问题,不可能做到100%的准确,这样就导致了bug的产生,而使用基类方式,定义一个可以正确执行的基类,而在派生类中适当的修改已达到最终需求,无疑会使程序更加稳定,出问题的几率更小;
  iii)扩展(Versioning):如果给基类增加新的方法(method),那么,继承的子类可能无需编译即可使用基类中新增加这些方法;而使用接口的话,就不这么容易了,接口中增加新的声明后,必须在子类中去实现(implement)这些新增的方法。
3)使用interface的一些情况:对于那些提供的相对稳定(consistent)的操作的类,最好给它们定义一个统一的interface。 如,你的类中都有聚合对象(列表),都能够增加、插入、删除某一列表中的项目,那么,我们就可以让他们都继承与IList<T>接口,此时,你就可以对你的那些类进行增加、插入、删除等操作,而无需知道他们的具体类,因为你知道他们都实现了IList<T>接口的方法。

4)当然,有时定义接口和使用类继承效果没什么区别,如实现Compare功能,FLC提供了ICompareer<T>和Comparer<T>的抽象类供继承。看你的习惯了:)



本文转自Jack Niu博客园博客,原文链接:http://www.cnblogs.com/skywind/archive/2007/05/11/743002.html,如需转载请自行联系原作者

相关文章
|
1月前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
1月前
|
IDE C# 开发工具
C#系列之接口介绍
C#系列之接口介绍
|
1月前
|
C#
58.c#:directory类
58.c#:directory类
12 0
|
1月前
|
C#
57.c#:directorylnfo类
57.c#:directorylnfo类
13 0
|
1月前
|
监控 C#
55.c#:file类
55.c#:file类
16 1
|
1月前
|
算法 C#
54.c#:random类
54.c#:random类
14 1
|
1月前
|
C#
51.c#:string类的静态方法
51.c#:string类的静态方法
20 1
|
1月前
|
C#
28.c#关键字base初步学习
28.c#关键字base初步学习
11 0
|
1月前
|
C#
27.c#关键字sealed修饰类
27.c#关键字sealed修饰类
12 0
|
1月前
|
C#
深入C#中的String类
深入C#中的String类
11 0