C#之虚方法解读

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类里的检查,直到找到第一个重载了该虚方法的父类为止,然后执行该父类里重载后的方法。


猜你喜欢

转载自blog.csdn.net/chenhongwu666/article/details/55224329
今日推荐