gpt4 book ai didi

delphi - 如何在接口(interface)中实现参数化方法以在 Spring 框架中使用

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

我正在尝试集成 Aurelius ORM 框架和 Spring 4D 框架,并且大部分都成功了,但是 Aurelius ORM(以及其他框架)依赖于“对象管理器”来加载和保存对象数据库。我正在做的部分工作是尝试尽可能地将类的实现和接口(interface)分开。然而,当为此对象管理器(Aurelius 中的 TObjectManager)创建接口(interface)时,我很难实现对象管理器的“查找”方法。例如,对象管理器支持以下方法:

MyObjectManager := TObjectManager.Create(Connection);
ExistingSale := MyObjectManager.Find<TSale>(1); // Find the Sale record with ID = 1 of the class TSale.

现在尝试将 ObjectManager 声明转换为接口(interface),我尝试按以下方式执行此操作:

IObjectManager = Interface
['{1F54162B-D7D7-4E42-AC9D-D269803371DB}']
function Find<T>(ID: Integer) : T;
end;

这就是问题所在,因为编译器失败并出现错误:

[DCC Error] E2535 Interface methods must not have parameterized methods

基本上,我需要提供一个可以在自己的对象管理器中调用的接口(interface)函数,例如:

function TMyOwnObjectManager.Find<T>(ID: Integer) : T;
begin
Result:=fAureliusObjectManager.Find<T>(ID);
end;

感谢大家的帮助,几天来一直在努力想出一个解决办法。

最佳答案

好吧,虽然这不是我在接口(interface)声明方面寻找的解决方案,但我设法克服了从 TObjectManager 继承的问题并通过以下方式重新声明 Find 函数:

function TMyOwnManager.Find(Class: TClass; IdValue: Variant): TObject; 
begin
// Call the TObjectManager protected method "Find(Clazz:TClass; IdValue: Variant)"
Result := inherited Find(TClass(Class), IdValue);
end;

希望它对某人有帮助。

关于delphi - 如何在接口(interface)中实现参数化方法以在 Spring 框架中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10452181/

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