【发布时间】:2015-09-17 20:22:08
【问题描述】:
我正在使用 Delphi XE3 和 我不明白为什么下面的第一个演员无法编译:(
type
TBase = class
end;
TDerived = class(TBase)
end;
procedure cast();
var
bases : TObjectList<TBase>;
deriveds : TObjectList<TDerived>;
begin
bases := deriveds; // specific to generid, Here !
deriveds := bases; // generic to specific, ok should not compile as is !
end;
【问题讨论】:
-
是
TDerived类应该像TDerived = class(TBase)一样扩展TBase吗? -
@fantaghirocco 如果情况也是如此,也会发生同样的情况。
-
FWIW 阅读我关于该主题的文章:delphisorcery.blogspot.de/2014/10/generics-and-variance.html
-
我修复了您的代码,以便从
TBase派生TDerived。从命名中可以清楚地看出您打算这样做。您的代码无法编译的原因是 Delphi 不支持泛型的协变。如副本中所述。 -
好的,谢谢!我会阅读那些有趣的链接:)