2

这是给我错误的代码:

TAdvSmoothDockItems = class(TCollection)
private
  FOwner: TAdvSmoothDock;
  FOnChange: TNotifyEvent;
protected
  function GetItem(Index: Integer): TAdvSmoothDockItem; virtual; //YLM_TMS_01
  procedure SetItem(Index: Integer; const Value: TAdvSmoothDockItem); virtual; //YLM_TMS_01
  function GetOwner: TPersistent; override;
public
  constructor Create(AOwner: TAdvSmoothDock); overload; virtual;    //YLM_TMS_01
  function Add: TAdvSmoothDockItem; virtual;    //YLM_TMS_01
  function Insert(Index: Integer): TAdvSmoothDockItem; virtual;    //YLM_TMS_01
  property Items[Index: Integer]: TAdvSmoothDockItem read GetItem write SetItem; default;
  procedure Delete(Index: Integer); virtual;    //YLM_TMS_01
published
  property OnChange: TNotifyEvent read FOnChange write FOnChange;
end;


TKHAdvSmoothDockItems = class(TAdvSmoothDockItems)
  private
    FOwner: TKHAdvSmoothDock;
    FOnChange: TNotifyEvent;
  protected
    function GetItem(Index: Integer): TKHAdvSmoothDockItem; override;
    procedure SetItem(Index: Integer; const Value: TKHAdvSmoothDockItem); override;
    function GetOwner: TPersistent; override;
  public
    constructor Create(AOwner: TKHAdvSmoothDock);
    function Add: TKHAdvSmoothDockItem;
    function Insert(Index: Integer): TKHAdvSmoothDockItem;
    property Items[Index: Integer]: TKHAdvSmoothDockItem read GetItem write SetItem; default;
    procedure Delete(Index: Integer); override;
  published
    property OnChange: TNotifyEvent read FOnChange write FOnChange;
  end;

这段代码给了我以下错误:

E2037 'GetItem' 的声明与之前的声明不同

为什么 ?我已将基类中的 GetItem 声明为“虚拟”,然后我尝试在下一个类(TKHAdvSmoothDockItems)中覆盖它......?如何解决?

4

1 回答 1

4

因为

function GetItem(Index: Integer): TAdvSmoothDockItem; virtual;

不同于

function GetItem(Index: Integer): TKHAdvSmoothDockItem; override;

结果类型必须相同。

于 2012-07-11T14:02:34.003 回答