C#之虚方法解读

本文详细解释了C#中虚方法的概念及其实现原理。介绍了虚方法的特点,包括不允许使用static、abstract等修饰符,以及不能是私有的。并通过一个例子说明了如何通过override关键字在派生类中重写虚方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#之虚方法解读


方法声明前带有virtual关键字,那么这个方法就是虚方法,虚方法的实现可以由派生类所取代,这种取代是通过方法的重写实现的
特点:
1.虚方法不允许有static修饰符
2.虚方法不允许有abstract修饰符
3.虚方法不允许有override修饰符
4.虚方法不能是私有的,不能使用private修饰符


一般方法在编译时就静态地编译到了执行文件中,其相对地址在程序运行期间是不发生变化的
而虚方法在编译期间是不被静态编译的,它的相对地址是不确定的,它会根据运行时期对象实例来动态判断要调用的函数


eg:Bird a = new Eagle(); 其中Bird是申明类,Eagle是实例类。

1.当a调用一个Eagle类的方法时,系统会直接去检查Eagle类,看所调用的方法是否为虚方法;
2.如果不是虚方法,那么它就直接执行该方法。而如果是一个虚方法,那么这个时候它就不会立刻执行该方法了,而是开始检查Eagle类。
3.在这个Eagle类里,他会检查Eagle类的定义中是否有实现该虚方法或者重新实现该虚方法(通过override关键字)的方法,
如果有,它就不会再找了,而是马上执行该Eagle类中实现虚方法的方法。

4.而如果没有的话,系统就会不停地往上找Eagle类的父类,并对父类重复刚才在Eagle类里的检查,直到找到第一个重载了该虚方法的父类为止,然后执行该父类里重载后的方法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值