gpt4 book ai didi

Delphi 2009泛型编译问题

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

我正在检查 Delphi 2009 试用版,但马上就遇到了泛型方面的问题。

以下代码无法编译,我一点也不知道为什么它会为 Equals() 方法提供 E2015:

type
TPrimaryKey<T> = class(TObject)
strict private
fValue: T;
public
constructor Create(AValue: T);
function Equals(Obj: TObject): boolean; override;
function GetValue: T;
end;

constructor TPrimaryKey<T>.Create(AValue: T);
begin
inherited Create;
fValue := AValue;
end;

function TPrimaryKey<T>.Equals(Obj: TObject): boolean;
begin
Result := (Obj <> nil) and (Obj is TPrimaryKey<T>)
and (TPrimaryKey<T>(Obj).GetValue = fValue);
end;

function TPrimaryKey<T>.GetValue: T;
begin
Result := fValue;
end;

为什么编译器认为 fValue 和 GetValue() 的结果不能比较?

最佳答案

如果 T 是一个字符串呢?如果是 TSize 记录怎么办?

如果不限制 T(例如使用 ),您无法确定比较是否有意义。

相反,如果您想比较两个 T 类型的值,则可以使用 Generics.Defaults 单元并使用:

TEqualityComparer<T>.Default.Equals(x, y)

比较类型 T 的值 x 和 y。

关于Delphi 2009泛型编译问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/270724/

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