【问题标题】:Delphi generics invalid cast [duplicate]Delphi泛型无效强制转换[重复]
【发布时间】: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 不支持泛型的协变。如副本中所述。
  • 好的,谢谢!我会阅读那些有趣的链接:)

标签: delphi casting


【解决方案1】:

很简单:这是两种不同的类型,并且不兼容。泛型的整个想法是使类型转换严格,并且编译器正在做它的设计目的 - 防止你混淆类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 2014-02-04
    • 1970-01-01
    相关资源
    最近更新 更多