C#语法之定义接口和抽象类
2008-06-15 08:06
302 查看
抽象类是abstract修饰符用于表示所修饰的类是不完整的,并且只能用做基类。抽象类和非抽象类的不同点:
抽象类不能直接实例化。虽然一些变量和值编译时类型可以是抽象的,但是这样的变量和值必须为null,或者含有对非抽象类的实例的引用(此非是从抽象派生出的)。
当从抽象派生非的时候,这些非必须具体实现所继承所有的抽象成员,从而重写那些抽象成员。
abstract class A
{ publish abstract void F();}
abstract class B:A B为抽象类,所有他不用提供F的实现
{public void G();}
class C:B C继承A B的所有抽象成员,并且提供一个具体实现
{
publish override void F()
{//actual implementation of F}
}
由于C中没有抽象成员,所以可以,但不是必须将C声明为非抽象类。
接口
接口可以拥有静态成员、嵌套类型、抽象、虚拟成员、属性和事件。实现接口的任何类都必须提供所声明的抽象成员的定义。
他和抽象类的区别:
1) 接口不能有非抽象方法,但抽象类可以
2)一个类可以实现多个接口,但只能有一个父类
3)接口不属于继承结构,他实际于继承无关,因此无关的类也可以实现同一个接口
4)抽象类是一个不完整的类,需要进一步细化;而接口只是个行为的规范
5)接口基本不具备任何基本特点,他只是承诺了能调用的方法
6)接口可以支持回调,但是继承不行。用于回调的接口只是提供指向方法的指针,而且是类型安全的指针方法。
抽象类不能直接实例化。虽然一些变量和值编译时类型可以是抽象的,但是这样的变量和值必须为null,或者含有对非抽象类的实例的引用(此非是从抽象派生出的)。
当从抽象派生非的时候,这些非必须具体实现所继承所有的抽象成员,从而重写那些抽象成员。
abstract class A
{ publish abstract void F();}
abstract class B:A B为抽象类,所有他不用提供F的实现
{public void G();}
class C:B C继承A B的所有抽象成员,并且提供一个具体实现
{
publish override void F()
{//actual implementation of F}
}
由于C中没有抽象成员,所以可以,但不是必须将C声明为非抽象类。
接口
接口可以拥有静态成员、嵌套类型、抽象、虚拟成员、属性和事件。实现接口的任何类都必须提供所声明的抽象成员的定义。
他和抽象类的区别:
1) 接口不能有非抽象方法,但抽象类可以
2)一个类可以实现多个接口,但只能有一个父类
3)接口不属于继承结构,他实际于继承无关,因此无关的类也可以实现同一个接口
4)抽象类是一个不完整的类,需要进一步细化;而接口只是个行为的规范
5)接口基本不具备任何基本特点,他只是承诺了能调用的方法
6)接口可以支持回调,但是继承不行。用于回调的接口只是提供指向方法的指针,而且是类型安全的指针方法。
相关文章推荐
- 7.C#知识点:抽象类和接口浅谈
- 抽象类和接口在C#中的区别和使用
- c#接口和抽象类的区别(转载)
- C#动态确定数组个数,以及IList无法创建抽象类或接口错误
- C#OOP之八 继承 接口和抽象类
- C#中抽象类和接口的区别
- C#中接口和抽象类的使用上的主要差别在哪里?
- c#接口和抽象类的区别
- C#中抽象类和接口
- 黑马程序员--浅谈我对C#中抽象类与接口的理解
- C#温故而知新学习系列之面向对象编程—接口和抽象类的区别是什么?(十八)
- C#中抽象类和接口的区别
- C#中抽象类和接口的区别与使用
- (教学思路 C#之类九)抽象类和接口
- 【原创】抽象类和接口的区别(C#)
- C#中的虚方法、抽象方法、抽象类以及接口
- [java语法]基本语法(7) 面向对象--抽象类与接口
- 在C#中使用IDL文件,IDL是个接口定义文件
- 加入一个c#的接口中定义了属性,那么实现这个接口的类
- c#学习笔记 --接口和抽象类的区别?