欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 »  .NET本质论第一卷:公共语言运行库教程 » 正文

本教程章节列表

接口方法声明形式

创建时间:2012年12月18日 23:18  阅读次数:(5091)
分享到:
这种情形会在用Base类型的引用指向Derived2的实例时发生。当使用这种引用的时候,Base中的Stop方法是非虚构,因此没有任何虚方法调用(或派生类型重载)生效。有点奇怪的(但却是预期的)是Turn方法仍将分发到Base中的方法实现。这是因为在Derived2中声明Turn的实现时,开发人员并没有使用override关键字。缺少override关键字将告知c#编译器使用newSlot特性发出方法声明,这是一种导致编译器认为Derived2中的Turn方法与Base中的Turn方法毫无关系的措施。

接口和基类型

如果前面的讨论使你陷入迷惑,不妨看看示例6.6。这个示例演练了重写(override)、重载(overload)和接口(interface)的大多数可能的组合,不妨试着指出这个程序的运行结果,特别是要指出是6个Dolt方法中的哪一个将被编译器和(或者) CLR选中,用于Main方法中的4个方法调用。

Inberitance Abuse

第一个调用将分给e,因为对象的具体类型有一个名为DoIt的public方法;第二个调用将分发给e,因为Derved.DoIt被声明为virtual;第三个方法将分发给b,因为即使是Base.DoIt被声明为virtual,但后续的派生方法还是重载了它的使用:第四个调用将分发到C,因为ICommon.Dolt隐式地为virtual。当然,你可能不会像这样编写代码,不过,这可能(当然也可能不能)有助于你认识到CLR支持这种方式。e
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf】

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 48+87=? 的结果(结果是:135)
结  果: