c# – 为什么可以从同一方法的覆盖版本调用方法的基本版本
我很困惑为什么C#让我这样做:
基类 public virtual void OnResultExecuted(ResultExecutedContext filterContext) { } 派生类 public override void OnResultExecuted(ResultExecutedContext filterContext) { base.OnResultExecuted(filterContext); } 这段代码没有问题.但它是如何调用base.OnResult当这是我重写的方法时执行了? 解决方法
为什么这很有用是非常明显的. “怎么样?”不太明显,但也很有趣.
存储.NET代码的MSIL编码有两个方法调用指令: >打电话 不同之处在于,当callvirt与虚方法一起使用时,它不会调用指示的方法.相反,它将指示的方法映射到对象类的vtable中的一个槽,找到属于该对象类的实际实现,并调用该版本. (对于非虚方法,callvirt只是添加一个空检查,然后直接调用指定的方法). 调用指令不使用vtable.它只是调用MSIL中指定的方法.在C#中使用base关键字时,编译器会生成一个调用指令,以便使用基类提供的确切方法,而不是vtable中链接的重写方法. 此行为是documented on MSDN for the
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |