delphi – 隐藏无参数创建与重新引入?
发布时间:2020-12-15 09:51:51 所属栏目:大数据 来源:网络整理
导读:当我开始使用Delphi时,我读到了避免无参数Create构造函数无用调用的唯一方法是在其中抛??出异常或断言. 当我本周第一次使用reintroduce关键字时,我发现它似乎也解决了这个问题. Test = classprivate n_ : Integer;public constructor Create(n : Integer); r
当我开始使用Delphi时,我读到了避免无参数Create构造函数无用调用的唯一方法是在其中抛??出异常或断言.
当我本周第一次使用reintroduce关键字时,我发现它似乎也解决了这个问题. Test = class private n_ : Integer; public constructor Create(n : Integer); reintroduce; end; 对Test.Create的调用给了我所需的编译器错误.这种方法有什么问题吗? 解决方法
好吧,简单问题:如果重新引入方法,它将隐藏父方法.这应该是你想要的,但请检查以下代码:
type TClassParent = class public procedure DoSomething; overload; procedure DoSomething(Something: Integer); overload; end; TClassChild = class(TClassParent) public procedure DoSomething(SomethingElse: string); reintroduce; end; var Child: TClassChild; begin Child := TClassChild.Create; Child.DoSomething; Child.DoSomething(1024); Child.DoSomething('Something'); 这给你两个错误!为什么?因为父级中的两个DoSomething方法现在都隐藏了!有时,你想要这个.其他时候,你没有.如果不这样做,则需要再次将这些缺少的方法添加到子类中,调用继承的方法如下: procedure TClassChild.DoSomething(SomethingElse: string); begin inherited DoSomething(SomethingElse); end; 然后,这就是你想要的,对吧?隐藏具有相同名称的所有父方法.但是不要忘记你仍然可以调用继承的方法.将接口链接到父类时也要注意.子类仍将支持该接口,但通过接口而不是对象调用方法将导致调用父项而不是子项!如果要从父项隐藏方法,重新引入方法是一种很好的做法.但它也会隐藏具有相同名称的虚拟方法!通常情况下,覆盖虚拟方法会更好,但是在更改参数列表时,使用重新引入实际上会在正常情况下从类外部禁用父类.在课堂上,您仍然可以访问它们,没有任何警告…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |