用接口和抽象类,与不用究竟究竟有什么区别或好处?

接口和抽象类关系很紧密,它们都具有对成员的抽象。  
          对于一个抽象类,至少一个方法是抽象方法既可,这意味着它也可以具有具体方法[译注:Concrete   Method,这只是相对于抽象方法而言,面向对象中并没有这个概念]。  
          对于一个接口,所有的方法必须都是抽象的。  
          实现了一个接口的类必须为接口中的所有方法提供具体的实现,否则只能声明为抽象类。  
          在C#中,多重继承(Multiple   Inheritance)只能通过实现多个接口得到。抽象类只能单继承[注:C#中的单继承是指所有类作为基类的时候都只能是派生类声明中唯一的基类,而不仅仅是抽象类]。  
          接口定义的是一个契约,其中只能包含四种实体,即方法、属性、事件和索引器。因此接口不能包含常数(Constant)、域、操作符、构造器、析构器、静态构造器或类型[译注:指嵌套的类型]。  
          同时,一个接口还不能包含任何类型的静态成员。修饰符abstract、public、protected、internal、private、virtual、override都是不允许出现的,因为它们在这种环境中是没有意义的。  
          类中实现的接口成员必须具有公有的可访问性。
 
举个最简单例子吧.假如有个构建SQL语句的类.它有一个方法获得任意字符通配符.为此,我们写个抽象类:  
  public   abstract   class   DbFactoryBase  
  {  
          //默认实现,通配符  
          public   virtual   string   GetMultiLikeChar()  
          {  
                  return   "%";  
          }  
  }  
  //我们写MSSQL的实现  
  public   class   SqlSvrFactory:DbFactoryBase  
  {  
          //GetMultiLikeChar方法不需要重载  
  }  
  //我们写Jet的实现  
  public   class   JetFactory:DbFactoryBase  
  {  
          //重载,通配符  
          public   override   string   GetMultiLikeChar()  
          {  
                  return   "*";  
          }  
  }  
  好处是显而易见的,抽象类提供了默认实现,子类只在需要更改的时候才重载这个方法,我们这个类可以很容易扩展,比如增加对ORACLE的实现,调用这个抽象类的代码也不需要改变,但返回来的字符已经不同了.代码看上去也更简洁...等等.这只是冰山之一角.建议多看看模式之类的书.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-466027/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12639172/viewspace-466027/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值