我正在查看Delphi 2009试用版,但是立即遇到了仿制药问题.
下面的代码没有编译,我没有丝毫想到为什么它给了我E2015的Equals()方法:
type TPrimaryKey= class(TObject) strict private fValue: T; public constructor Create(AValue: T); function Equals(Obj: TObject): boolean; override; function GetValue: T; end; constructor TPrimaryKey .Create(AValue: T); begin inherited Create; fValue := AValue; end; function TPrimaryKey .Equals(Obj: TObject): boolean; begin Result := (Obj <> nil) and (Obj is TPrimaryKey ) and (TPrimaryKey (Obj).GetValue = fValue); end; function TPrimaryKey .GetValue: T; begin Result := fValue; end;
为什么编译器认为无法比较fValue和GetValue()的结果?
如果T是一个字符串怎么办?如果它是TSize记录怎么办?
在不约束T的情况下(例如,使用
相反,如果要比较T类型的两个值,可以使用Generics.Defaults单元并使用:
TEqualityComparer.Default.Equals(x, y)
比较类型T的值x和y