菜鸟C#成长记——小议接口和抽象类比较
2008-10-13 19:36
274 查看
我们在日常中经常讨论到接口和抽象了的异同,下面我就跟大家探讨一下这个问题,以作抛砖引玉之用,希望大家多多砸玉哦。
接口和抽象类非常相似,包括它们要求实现和继承自己的类实现全部方法属性等。如上文接口的实现所提到的,我们完全可以将IStorable声明成一个抽象类:
//定义抽象类
abstract class Stroable
//定义接口
interface IStorable
{
{ get;set;}
}
Document从IStrobale继承,跟实现接口没有太大区别。
接口是可以多重继承,抽象类不可以。只有在必须使用方法定义或者成员变量的时候,才应考虑采用抽象类。
按照相顾的技术标准文献,Microsoft的设计人员一般不建议大家使用接口的,而是推荐使用抽象类,因为抽象类更加便于版本控制。假设你设计了一个接口供程序员使用,现在想给这个接口增加一个新的成员,这时候你就不得不改变既有的接口,破坏针对原有接口编写新的代码,或者是两外创建想IStrobale2这样的新接口。如果你经常这样做的话,你很快就会得到大批这样紧密关联的接口,造成系统的越来越复杂。
而使用抽象类的话,你只是需要追加一个新的虚拟方法并配以默认实现就可以了,这样做既可以解决问题,又没有在同一个命名空间中引入新的类。
最佳的体验实践是:若要创建一个被多人复用的类库,最好使用抽象类;若是为了单个项目创建类,使用接口更好,因为接口具有抽象类所没有的更加容易理解的弹性。
接口和抽象类非常相似,包括它们要求实现和继承自己的类实现全部方法属性等。如上文接口的实现所提到的,我们完全可以将IStorable声明成一个抽象类:
//定义抽象类
abstract class Stroable
//定义接口
interface IStorable
{
{ get;set;}
}
Document从IStrobale继承,跟实现接口没有太大区别。
接口是可以多重继承,抽象类不可以。只有在必须使用方法定义或者成员变量的时候,才应考虑采用抽象类。
按照相顾的技术标准文献,Microsoft的设计人员一般不建议大家使用接口的,而是推荐使用抽象类,因为抽象类更加便于版本控制。假设你设计了一个接口供程序员使用,现在想给这个接口增加一个新的成员,这时候你就不得不改变既有的接口,破坏针对原有接口编写新的代码,或者是两外创建想IStrobale2这样的新接口。如果你经常这样做的话,你很快就会得到大批这样紧密关联的接口,造成系统的越来越复杂。
而使用抽象类的话,你只是需要追加一个新的虚拟方法并配以默认实现就可以了,这样做既可以解决问题,又没有在同一个命名空间中引入新的类。
最佳的体验实践是:若要创建一个被多人复用的类库,最好使用抽象类;若是为了单个项目创建类,使用接口更好,因为接口具有抽象类所没有的更加容易理解的弹性。
相关文章推荐
- C#抽象类和接口的比较
- 比较C#中抽象类(abstract class)和接口(interface)的异同
- c#接口和抽象类比较
- C#抽象类与接口的比较
- C#中的接口和抽象类的比较
- c#接口和抽象类比较
- C#接口和抽象类的比较
- C#两个知识点的补充 string与stringbuilder的区别以及深层机制 C#中接口与抽象类的比较以及各自适用的场景
- C#抽象类与接口的比较
- C#抽象类与接口的比较
- C#中类、抽象类、接口的比较
- 菜鸟C#成长记——接口的实现
- 抽象类与接口的比较
- (转)java中抽象类与接口的比较
- C#中抽象类和接口的区别(转载)
- 疯狂JAVA讲义-接口和抽象类比较
- C#设计模式读书笔记:抽象类跟接口的比较
- C#中抽象类和接口的区别
- 转:c#接口和抽象类的区别
- C++虚函数virtual,纯虚函数pure virtual和Java抽象函数abstract,接口interface与抽象类abstract class的比较