在C#中使用关键字 abstract 来定义抽象类和抽象方法。
First ——abstract 和virtual关键字的区别与联系
联系
它们有一个共同点:如果用来修饰方法,前面必须添加public,要不然就会出现编译错误:虚拟方法或抽象方法是不能私有的。毕竟加上virtual或abstract就是让子类重新定义的,而private成员是不能被子类访问的。
区别1
virtual(虚拟的)
这表是这个方法式有方法实体的,即这个方法可以像一般方法使用
abstract
(抽象的)
表示这个方法只有一些基础的构架,必须要在子类中将这个方法写出这个方法的实体以后,这个方法才能像正常的方法一样使用,这样做的目的:比如我只是在构架整个软件框架的时候想到要有这么一个功能,但是还没有具体想好这个功能怎么实现,那么就可以先写一个抽象方法,待以后有灵感的时候再实现
区别2
virtual可以被子类重写,不重写也可以像正常函数一样使用,如果重写了virtual修饰的方法,前面必须添加override
而abstract必须被子类重写
"一个包含一个或多个纯虚函数的类叫抽象类,抽象类不能被实例化,进一步一个抽象类只能通过接口和作为其它类的基类使用."
2.抽象类不能被实例化。
一个抽象类可以包含抽象和非抽象方法,当一个类继承于抽象类,那么这个派生类必须实现所有的的基类抽象方法。
但是通过声明派生类也为抽象,我们可以避免所有或特定的虚方法的实现,(就是A是抽象类,B继承A,只要B也是抽象类,那么B就不必要实现A中的所有抽象方法)
3.不能把抽象类用密封(sealed)来修饰,因为抽象类就是用来被继承,然后在继承的子类中实现方法,sealed关键字是不让这个类被继承。
4抽象类可以包含抽象方法和抽象属性,也可以包含普通的类成员。
从抽象类派生的非抽象类必须实现全部的抽象方法和抽象属性,包括继承来的