C#中的interface、virtual和abstract
一、Abstract:
abstract方法必须在abstarct类中声明,没有默认实现,子类必须实现。
二、Virtual:
virtual方法可以声明在abstract类中,也可以声明在非abstarct类中,并且可以有默认实现。
三、Interface(接口)
接口的一些描述
1. 接口是一个引用类型,通过接口可以实现多重继承。
2. C#中接口不能有new、public、protected、internal、private等修饰符。
3. 接口中只能声明"抽象"成员(所以不能直接下一步对接口进行实例化(即不能使用new操作符声明一个接口的实例对 象)),而不能声明共有的域或者私有的成员变量。
4. 接口声明不包括数据成员,只能包含方法、属性、事件、索引等成员。
5. 接口成员的访问级别是默认的(默认为public),所以在声明时不能再为接口成员指定除public外的任何访问修饰符,否则 编译器会报错。
6. 接口成员不能有static、abstract、override、virtual修饰符,使用new修饰符不会报错,但会给出警告说不需要关键字new。
7. 在声明接口成员的时候,不准为接口成员编写具体的可执行代码,也就是说,只要在对接口进行声明时指明接口的成员名称和参数就可以了。
8. 接口一旦被继承,子类需要把接口中所有成员实例化(通过具体的可执行代码实现接口抽象成员的操作)。
(百度百科:http://baike.baidu.com/link?url=UlmCxkt6O7lqmGK4IdM5CmzwhK3nnEQmA3dCkh9I6-noq3GfVv-chDLIo3QMQYPlEo3Vv8PK8J2e9OidgP8Sta)
接口的意义
1. 接口一个比较常用的用法是声明一组行为方法,这组行为方法可以有不同的实现和多个实现,而使用这组行为的类也只关心行为的声明。简单说就是定义了交互的契约。
2. 面向接口编程,容易对应用系统进行分层,不同层次之间使用接口进行交互。这有以下好处:层次职责清晰;容易做UT;容易解耦(DI,IoC)。
3. 可以实现多重继承。