gpt4 book ai didi

delphi - 隐藏无参数创建并重新引入?

转载 作者:行者123 更新时间:2023-12-03 15:01:09 25 4
gpt4 key购买 nike

当我开始使用 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;

话又说回来,这就是你想要的,对吧?隐藏所有同名的父方法。不过,请不要忘记您仍然可以调用继承的方法。
将接口(interface)链接到父类时还要注意。子类仍然支持接口(interface),但通过接口(interface)而不是对象调用方法将导致调用父类,而不是子类!
如果您想隐藏方法,重新引入方法是一个很好的做法 parent 。不过,它还会隐藏同名的虚拟方法!通常情况下,重写虚方法会更好,但是当更改参数列表时,使用重新引入实际上会在正常情况下从类外部禁用父类。在类里面,您仍然可以访问它们,没有任何警告...

关于delphi - 隐藏无参数创建并重新引入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4213384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com