在C#中碰到了这两个东西“virtual”与“abstract”,自己也有一个问题就是对于他们的用处是干什么的。

这个两个的共同点还是有的,就是都可以重写,通过覆盖父类的定义,让子类重新定义。并且在用来修饰方法时,前面一定是public,不然会出现编译错误,这就是他们不能够是私有的。而对于它们的重写关键词就是override,有这个关键词也是防止了子类不小心把父类的一些方法给重写了。有这个override也是一个标识。

对于这两个的不同之处也是有的

1.virtual必须有方法体(一对大括号也算“{}”),而abstract修饰的方法不能够有个方法体,而且abstract还必须是声明在抽象类中的抽象方法,不能够声明在普通类中,不然会报错。而这个抽象类中的抽象方法必须被继承类全部实现才行。

2.virtual可以被重写。abstract必须被重写。

3.抽象类不能够直接被实现,只能够通过派生类继承。

那么关于virtual的认识就是它的很大功能是实现代码的复用,当然满足了个别子类的重写的需求。

C#学习virtual(虚拟的)和abstract(抽象的)的区别_抽象方法

C#学习virtual(虚拟的)和abstract(抽象的)的区别_子类_02

C#学习virtual(虚拟的)和abstract(抽象的)的区别_抽象类_03

而抽象方法只能够通过重写来实现。

C#学习virtual(虚拟的)和abstract(抽象的)的区别_抽象类_04