2008-11-25 37 views
2

誰能告訴我爲什麼第二次在Delphi 7中編譯失敗?作爲TWinControl鑄造TWebBrowser

var 
    WebBrowser: TWebBrowser; 
begin 
    WebBrowser := TWebBrowser.Create(Self); 
    TWinControl(WebBrowser).Parent := Self; 
    (WebBrowser as TWinControl).Parent := Self; // fail here 
end 

家長在TWebBrowser是隻讀的IDispatch屬性,但爲什麼第一次石膏看到TWinControl parent屬性確定,但第二個不?

感謝

回答

7

第一投用任何檢查,它假定程序員是正確的,不勝枚舉。 第二個演員使用一些理智檢查。 (如果演員劇照無效,會導致異常)。 我認爲在這種情況下,編譯器因類似的命名屬性而感到困惑。它甚至可能是一個過分優秀的優化器。

至少,

var 
    wc : TWinControl; 
begin 
    wc := (WebBrowser as TWinControl); 
    wc.Parent := Self; 
end; 

作品。所以有一個規避。