gpt4 book ai didi

Delphi - 如何 'Overload' 'procedure of object' 类型

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

“Delphi”是否提供任何方法来“重载”“对象过程”类型,例如

TTesting = class(TObject)
Public
Type
TInformationEvent1 = procedure( x: integer ) of object; overload ;
TInformationEvent1 = procedure ( x: integer ; y: string) of object; overload ;
TInformationEvent1 = procedure ( x: integer ; y: string; z: Boolean) of object; overload ;
end

我可以通过这三种方式重载这个 TInformationEvent1 函数吗?

最佳答案

嗯,有点像。您可以定义具有相同名称但类型参数数量不同的泛型类型。

type
TInformationEvent<T> = procedure(x:T) of object;
TInformationEvent<T1,T2> = procedure(x:T1;y:T2) of object;
TInformationEvent<T1,T2,T3> = procedure(x:T1; y:T2; z:T3) of object;

当您将其中之一添加为类的成员时,您需要解析类型参数。

type
TMyClass = class
private
FMyEvent: TInformationEvent<Integer>;
FMyEvent2: TInformationEvent<Integer,string>;
public
property MyEvent: TInformationEvent<Integer> read FMyEvent write FMyEvent;
property MyEvent2: TInformationEvent<Integer,string> read FMyEvent2 write FMyEvent2;
end;

就编译器而言,这些是技术上不同的命名类型,但从开发人员的角度来看,您不需要为每种类型提供唯一的名称。请注意,使用 overload 关键字是不必要的,实际上是定义过程类型时使用的语法错误。 Overload 有一个非常具体的含义:即席多态性。不是这个。

请注意,如果您正在编写组件或控件并希望使用这些已发布的属性,您的情况可能会有所不同。表单设计器对泛型的支持参差不齐。

关于Delphi - 如何 'Overload' 'procedure of object' 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26732682/

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