菜鸟C#成长记——小议接口和抽象类比较

我们在日常中经常讨论到接口和抽象了的异同,下面我就跟大家探讨一下这个问题,以作抛砖引玉之用,希望大家多多砸玉哦。

接口和抽象类非常相似,包括它们要求实现和继承自己的类实现全部方法属性等。如上文接口的实现所提到的,我们完全可以将IStorable声明成一个抽象类:

 

        //定义抽象类
        abstract class Stroable
        
{
            
abstract public void Read();
            
abstract public void Write();
        }

 

        //定义接口
        interface IStorable
        
{
            
void Read();
            
void Write(object obj);
            
int Status get;set;}
        }

     

      DocumentIStrobale继承,跟实现接口没有太大区别。

接口是可以多重继承,抽象类不可以。只有在必须使用方法定义或者成员变量的时候,才应考虑采用抽象类。

       按照相顾的技术标准文献,Microsoft的设计人员一般不建议大家使用接口的,而是推荐使用抽象类,因为抽象类更加便于版本控制。假设你设计了一个接口供程序员使用,现在想给这个接口增加一个新的成员,这时候你就不得不改变既有的接口,破坏针对原有接口编写新的代码,或者是两外创建想IStrobale2这样的新接口。如果你经常这样做的话,你很快就会得到大批这样紧密关联的接口,造成系统的越来越复杂。

       而使用抽象类的话,你只是需要追加一个新的虚拟方法并配以默认实现就可以了,这样做既可以解决问题,又没有在同一个命名空间中引入新的类。

       最佳的体验实践是:若要创建一个被多人复用的类库,最好使用抽象类;若是为了单个项目创建类,使用接口更好,因为接口具有抽象类所没有的更加容易理解的弹性。

posted on 2008-10-13 19:36  冠华仔  阅读(362)  评论(2编辑  收藏  举报

导航