gpt4 book ai didi

delphi - 在子类中使用自类型参数创建泛型类或接口(interface)

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

我想创建一个可以子类化的类或接口(interface),始终使用当前类实例作为方法参数...

这是一个解释我的问题的示例:

 type IArithmeticObject = interface(IInterface)
procedure assign(ao : IArithmeticObject);
procedure add(ao : IArithmeticObject);
procedure remove(ao : IArithmeticObject);
procedure multiply(ao : IArithmeticObject);
procedure divide(ao : IArithmeticObject);
end;

接口(interface)IArithmeticObject应该是起点,引用基本算术运算,子类可以声明为

 type TInteger = class(TInterfacedObject, IArithmeticObject)
procedure assign(ao : TInteger);
procedure add(ao : TInteger);
procedure remove(ao : TInteger);
procedure multiply(ao : TInteger);
procedure divide(ao : TInteger);
end;

ao 的参数类型为 TInteger 而不是 IArithmeticObject

另一个想法是使用自引用泛型类型,例如:

  AMathObject = class;

AMathObject<T : AMathObject, constructor> = class
procedure assign(ao : T);virtual;abstract;
procedure add(ao : T);virtual;abstract;
procedure remove(ao : T);virtual;abstract;
procedure multiply(ao : T);overload;virtual;abstract;
procedure divide(ao : T);virtual;abstract;
end;

但我无法找出正确的语法...

有人对这种可能性(或不可能性)有任何想法吗?

最佳答案

如果我理解正确,您可能想从通用接口(interface)派生您的类。

type
IArithmeticObject<T> = interface
procedure assign(ao: IArithmeticObject<T>);
procedure add(ao: IArithmeticObject<T>);
procedure remove(ao: IArithmeticObject<T>);
procedure multiply(ao: IArithmeticObject<T>);
procedure divide(ao: IArithmeticObject<T>);
end;

TInteger = class (TInterfacedObject, IArithmeticObject<TInteger>)
procedure assign(ao: IArithmeticObject<TInteger>);
procedure add(ao: IArithmeticObject<TInteger>);
procedure remove(ao: IArithmeticObject<TInteger>);
procedure multiply(ao: IArithmeticObject<TInteger>);
procedure divide(ao: IArithmeticObject<TInteger>);
end;

根据Stefan Glienke's comment编辑的答案:现在类的方法接受声明为对象或接口(interface)的参数。

var
ao: IArithmeticObject<TInteger>;
begin
ao := TInteger.Create;
ao.multiply(ao);
end.

关于delphi - 在子类中使用自类型参数创建泛型类或接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35273793/

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