C#中virtual和abstract的区别

这两个次都是为了让子类重新定义,覆盖父类的定义。但在用法上差别较大
virtual 修饰的方法必须有方法实现(就算是一堆大括号也是可以的)
abstract 修饰的方法不能实现
virtual可以被子类重写但是后者必须被子类重写
如果类中的函数被abstract修饰则该类的类型也必须是abstract
Abstrac修饰的类不能被创建实例
C#中如果准备在子类重写父类的方法必须使用virtual修饰
abstract只能被继承不能被实例化
a)  virtual重点是实现多态,同一个方法能做不同的事情,也就是当一个方法会有不同的操作的时候要用virtual,例如:支付方法 pay(),可能通过微信去支付、也可能通过支付宝或者其他方式去支付,这个时候定义pay()方法的时候最好是用virtual修饰。
作为一个必须存在的方法的时候用abstract,比如要定义一个人类对象Class Person{}和一个鸟类对象Class Bird{},人是动物,鸟也是动物,所以一般会先定义一个共同的基类Class animal{},然后让人类和鸟类对象都继承这个基类。这个基类可以有共通的属性和方法,比如行走方法walk(),发声方法voice(),在基类中这两个方法都是不需要实现的,只需要在Person和Bird类中实现就可以了【Person和Bird类必需要实现这两个方法,这也保证了所有继承animal类的类都需要有walk()和voice()方法】,所以定义walk()和voice()方法的时候可以用abstract修饰
在静态属性上使用virtual是错误的


猜你喜欢

转载自blog.csdn.net/zhaoqiong0929/article/details/80270201