抽象类与接口

来源:互联网 发布:excel 数组 编辑:程序博客网 时间:2024/04/30 09:58
抽象类与接口紧密相关,它们不能示例化,并且常常部分实现或根本不实现。抽象类和接口之间的一个主要差别是:类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承。从抽象类派生的类仍可实现接口。可以在创建组件时使用抽象类,因为它们使您得以在某些方法中指定不变级功能,但直到需要该类的特定实现之后才实现其他方法。抽象类也制定版本,因为如果在派生类中需要附加功能,则可以将其添加到基类而不中断代码。在实现抽象类时,必须实现该类中的每一个抽象方法,而每个已实现的方法必须和抽象类中指定的方法一样,接收相同数目和类型的参数,具有同样的返回值。

 

virtual   关键字用于修改方法或属性的声明,在这种情况下,方法或属性被称作虚拟成员。虚拟成员的实现可由派生类中的重写成员更改。  
  ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/csref/html/vclrfVirtualPG.htm  
   
  abstract   修饰符用于表示所修饰的类是不完整的,并且它只能用作基类。  
  ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/csspec/html/vclrfcsharpspec_10_1_1_1.htm  
   
  interface  
  一个接口定义一个协定。实现接口的类或结构必须遵守其协定。  
  ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/csref/html/vcrefTheInterfaceType.htm  
  ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconInterfaces.htm  
   
  抽象类和接口  
  ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/csspec/html/vclrfcsharpspec_13_4_5.htm

 

如果一个基类方法要在派生类中被覆盖,就必须把这个基类方法申明为virtual  
   
   
  抽象方法和虚拟方法的区别在于:虚拟方法有一个实现部分,并为派生类提供了覆盖该方法的选项;相反,  
   
  抽象方法没有提供实现部分,强制派生类覆盖方法(否则派生类不能成为具体类)   
 

 

当一个类需要从多个父类中继承时,由于C#只支持单继承,所以,此时只能用接口。

 

虚函数:可以被override的函数。  
  抽象类:不能被实例化的类。  
  接口:只有函数定义,没有函数实现,只能被继承,不能被实例化的类。

接口中所有方法必须是抽象的,并且不能指定方法的访问修饰符。抽象类中可以有方法的实现,也可以指定方法的访问修饰符。