大佬教程收集整理的这篇文章主要介绍了Delphi意外的覆盖行为,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
对于我们的初学者手册,我写下了编程的一些基本内容(使用Delphi).这样做我发现了一个怪癖,我不太明白.为了演示继承,我写了一个基类和它的继承人.重新引入功能,另一个功能被继承人覆盖.
unit UOverride; interface type Base = class(TObject) Strict private const CName: String = 'Base-Class'; CMaxim: String = 'Somebody set up us the bomb.'; public function GetName(): String; virtual; function GetMaxim(): String; virtual; end; Heir = class(BasE) Strict private const CName: String = 'Heir-Class'; CMaxim: String = 'All your Base are belong to us!'; public function GetName(): String; reintroduce; function GetMaxim(): String; override; function GetBasename(): String; function GetBaseMaxim():string; end; implementation { Base } function Base.GetMaxim: String; begin Result := CMaxim; end; function Base.GetName: String; begin Result := CName; end; { Heir } function Heir.GetMaxim: String; begin Result := CMaxim; end; function Heir.GetName: String; begin Result := CName; end; end.
因此,当我创建Base的对象并调用too函数时,它按预期工作:
> GetName()=>基类和
> GetMaxim()=>有人为我们设置炸弹.
对于继承人的实例也是如此:
> GetName()=>继承人和
> GetMaxim()=>您的所有Base都属于我们!
现在我将我的Heir实例转换为Base并再次调用这两个函数.
> GetName()=>没有问题的基类
> GetMaxim()=>您的所有Base都属于我们!正如所料,因为它被Heir覆盖.
出于好奇,我向继承人增加了两个功能.
function Heir.GetBasename: String; begin Result := inherited GetName(); end; function Heir.GetBaseMaxim: String; begin Result := inherited GetMaxim(); end;
我希望GetBasename()给我Base-Class – 所以它发生了.对于GetBaseMaxim(),我不确定.在我看来,有三件事是可能的
>它不编译并抛出错误或
>它运行并将因异常而失败(因为重写了继承的函数或
>最期待它给了我来自继承人的GetMaxim()告诉我你所有的基地都属于我们!
都没发生!我得到有人给我们炸弹.来自我的基础课程?!为什么?我认为这个功能被Heir覆盖了!这不是什么大问题,但我不太了解这种行为,因为它不能像我预期的那样工作.有什么解释吗?
以上是大佬教程为你收集整理的Delphi意外的覆盖行为全部内容,希望文章能够帮你解决Delphi意外的覆盖行为所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。