gpt4 book ai didi

delphi-7 - 在 object pascal 中声明一个接口(interface)并将其用作返回值

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

使用 Delphi 7。这是一个(不完整的)示例来演示我的问题:

interface
uses Classes, Contnrs;

type
IEditorModule = interface;
procedure Method1;
procedure Method2;
end;

TEditorModuleList = class(TList)
protected
function GetItem(Index: Integer): IEditorModule;
procedure SetItem(Index: Integer; const Value: IEditorModule);
public
property Items[Index: Integer]: IEditorModule
read GetItem write SetItem; default;
end;

implementation

function TEditorModuleList.GetItem(Index: Integer): IEditorModule;
begin
Result := IEditorModule(inherited Items[index]);
end;

无法编译,因为我得到这个错误:

[错误] LEditorModule.pas(73):不兼容的类型:“IEditorModule”和“TObject”

声明一个新的 TList 后代的主要原因是能够做如下事情:

aModuleList[3].Method1;

什么样的语法允许我将对象转换为接口(interface)(而不是具体类)?事实:

  • 我不能让 TEditorModule 成为一个类。它需要是一个接口(interface),因为完全不同层次结构中的类将实现它。
  • 我需要一个类来存储对实现 IEditorModule 接口(interface)的对象列表的引用。

我该怎么做?

最佳答案

最简单的做法是对接口(interface)使用 TInterfaceList。它在 Delphi 7 中可用。TInterfaceList 中内置了一些逻辑来管理引用计数,例如在清除列表时将它们设置为 nil。

如果您查看 TInterfaceList 背后的代码,您将看到发生的一些操作。

您应该注意的一件事是 TInterfaceList 在内部使用 TThreadList,因此在锁定和解锁列表时会产生一些开销。

关于delphi-7 - 在 object pascal 中声明一个接口(interface)并将其用作返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23866083/

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