C#中Virtual与override分别有什么用途

C#中Virtual与override分别有什么用途,第1张

virtual方法

如果在父类中使用了virtual关键字,而在其派生类中有没有override或new关键字,而直接引用一个同名方法的话,编译器将会报告错误,并将使用new方法,及以忽略派生类中的方法的方式来运行。

为了是派生类的实例完全代替来自基类的类成员,基类必须将该成员声明为虚拟的。这是通过在该成员的返回类型之前添加virtual关键字来实现的。

使用virtual需注意:

virtual修饰符不能与static、abstract、private或override修饰符一起使用。

在静态属性上的使用virtual修饰符是错误的。

通过使用override修饰符的属性声明,可在派生类中重写virtual继承属性。

override方法:

override方法是提从基类继承的成员的新实现。通过override声明重写的方法称为重写方法。重写方法必须是virtual、abstract或override的。

如果在派生类中的方法前使用带有override的关键字,则派生类的对象将调用该方法,而不调用基类中的方法。

使用override需注意:

override生命不能更改virtual方法的可访问性。

override方法和virtual方法必须具有相同的访问级别修饰符。

不能使用修饰符new、static、virtual或abstract来修饰override方法。

重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,并且被重写的属性必须是virtual、abstract或override的。

irtual和abstract都是用来修饰父类的,通过覆盖父类的定义,让子类重新定义。

(1)virtual修饰的方法必须有实现(哪怕是仅仅添加一对大括号),而abstract修饰的方法一定不能实现。

(2)virtual可以被子类重写,而abstract必须被子类重写。

(3)如果类成员被abstract修饰,则该类前必须添加abstract,因为只有抽象类才可以有抽象方法。

(4)无法创建abstract类的实例,只能被继承无法实例化。

Override关键字主要是提供派生类对基类方法的新实现,重写的基类方法必须和Override的方法具有相同的签名, 此关键字不可以用于重写非虚方法和静态方法,与其配套使用的关键字是Virtual、abstract、Override。

与此同时,Override方 法还不可以修改Virtual方法的可访问性,Override方法和Virtual方法必须具有相同的访问修饰符,不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。

Virtual 关 键字允许在派生类中重写这些对象,默认情况下,方法是非虚拟的,不可以重写非虚方法,virtual关键字不可以与static、abstract、 private、override一起使用。Virtual关键字又是和override紧密不可分的,如果要实现Virtual方法就必须要使用 override或new关键字(new和override产生的机理不同)。

总结:New关键字主要用来区别派生类和基类同名方法的选择问题,通过隐藏基类方法,达到使编译器调用正确的方法的目的。Override主要用来对基类的方法和虚方法进行重写。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11537899.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存