加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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;

然后,这就是你想要的,对吧?隐藏具有相同名称的所有父方法.但是不要忘记你仍然可以调用继承的方法.将接口链接到父类时也要注意.子类仍将支持该接口,但通过接口而不是对象调用方法将导致调用父项而不是子项!如果要从父项隐藏方法,重新引入方法是一种很好的做法.但它也会隐藏具有相同名称的虚拟方法!通常情况下,覆盖虚拟方法会更好,但是在更改参数列表时,使用重新引入实际上会在正常情况下从类外部禁用父类.在课堂上,您仍然可以访问它们,没有任何警告……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读