Delphi:方法 'Create' 隐藏了基类的虚拟方法 - 但它就在那里

标签 delphi overloading

考虑假设的对象层次结构,从以下位置开始:

TFruit = class(TObject)
public
    constructor Create(Color: TColor); virtual;
end;

及其后代:

TApple = class(TFruit)
public
    constructor Create(); overload; virtual;
    constructor Create(Color: TColor); overload; override; //deprecated. Calls other constructor - maintaining the virtual constructor chain
end;

这里的想法是,我已经重写基类的虚拟构造函数,并使用恰好也是虚拟的重载 .

德尔福提示:

Method 'Create' hides virtual method of base type 'TFruit'

只不过它没有隐藏它 - 它就在那里!

  • 覆盖了祖先中的虚拟方法,并且
  • 用另一个版本重载了

这是怎么回事?

最佳答案

两种解决方案:

type
  TFruit = class(TObject)
  public
    constructor Create(Color: TColor); virtual;
  end;

  TApple = class(TFruit)
  public
    constructor Create(); reintroduce; overload;
    constructor Create(Color: TColor); overload; override;
  end;

或者:

type
  TFruit = class(TObject)
  public
    constructor Create; overload; virtual; abstract;
    constructor Create(Color: TColor); overload; virtual;
  end;

  TApple = class(TFruit)
  public
    constructor Create(); override;
    constructor Create(Color: TColor); override; 
  end;

关于Delphi:方法 'Create' 隐藏了基类的虚拟方法 - 但它就在那里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9103263/

相关文章:

c++ - 使用基类的重载函数

c++ - "error: expected unqualified-id before ' float ' "用于 operator[] 重载

c++ - 函数重载优先级(引用)

delphi - 使用 Delphi 进行条码扫描

windows - 为什么当用户单击任务栏按钮时模态 Delphi 窗体不接收 WM_SYSCOMMAND?

mysql - 使用 SQL 参数保护我的应用程序免受注入(inject)攻击

delphi - 改变 TAniIndicator 的颜色

delphi - 如何使用OpenToolsAPI在源代码编辑器中获取特定的行字符串(UTF8)或特定的行字符串长度

PHP 间接修改重载属性 - 使用 ARRAYS

swift - 如何消除重载函数的歧义