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

Delphi抽象类避免实现

发布时间:2020-12-15 09:21:42 所属栏目:大数据 来源:网络整理
导读:在 this问题中,您看到可以创建添加抽象keywrod的抽象类.我正在Delphi中翻译一个项目,但我发现它允许创建一个抽象类.这是代码: type TCableSPF = class abstract //codeend; 这是一个抽象类,当然我有很多实现它的子类.顺便说一句,我看到可以创建一个这样的实
在 this问题中,您看到可以创建添加抽象keywrod的抽象类.我正在Delphi中翻译一个项目,但我发现它允许创建一个抽象类.这是代码:

type
 TCableSPF = class abstract
  //code
end;

这是一个抽象类,当然我有很多实现它的子类.顺便说一句,我看到可以创建一个这样的实例;

a := TCableSPF.Create;

当我尝试调用其虚拟和抽象的方法时,我得到了错误,这是可以的,但我可以阻止创建类吗?或者Delphi默认允许这个?谢谢您的帮助

解决方法

类摘要是Delphi对.Net日的延续.
由于未知原因,此关键字后面没有(当前)实现.

如果要阻止抽象类的实例化,此关键字将无济于事.而是执行以下操作:

type
  TCableSPF = class abstract
  //code
strict protected
  //Define all constructors for an abstract class as protected.
  constructor Create; virtual; reintroduce;
end;

通过将所有构造函数定义为protected,只有后代对象可以访问构造函数,其他代码无法访问构造函数.
因为您重新引入了虚拟构造函数,所以您也无法使用以下方法对其进行实例化:

unit A; 

type
  TMyAbstractObject = class abstract(TObjectX)
  strict protected
    constructor Create; virtual; reintroduce;
  end;

...
unit B;

  TMyClass = class of TObjectX;

  AbstractObjectInstance = TMyClass.Create;  //Will not work for TMyAbstractObject

请注意,您不应声明构造函数覆盖.而是声明它虚拟重新引入(或者如果你不想允许虚拟构造函数则重新引入).

(编辑:李大同)

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

    推荐文章
      热点阅读