2015-09-17 55 views
-1

我用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; 
+1

是'TDerived'類應該延長'TBase'類似於'TDerived = class TBase)'? – fantaghirocco

+0

@fantaghirocco同樣會發生,如果是這樣的話。 –

+0

FWIW閱讀我關於這個問題的文章:ht tp://delphisorcery.blogspot.de/2014/10/generics-and-variance.html –

回答

0

很簡單:這是兩個不同的類型,並且是不相容的。泛型的整個概念是對類型進行嚴格的編碼,編譯器正在做它正在設計的目的 - 防止混合類型