作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在检查 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/
我是一名优秀的程序员,十分优秀!