谁能告诉我为什么第二次强制转换不能在Delphi 7中编译?
var
WebBrowser: TWebBrowser;
begin
WebBrowser := TWebBrowser.Create(Self);
TWinControl(WebBrowser).Parent := Self;
(WebBrowser as TWinControl).Parent := Self; // fail here
endTWebBrowser中的Parent是一个只读的IDispatch属性,但是为什么第一个强制转换可以看到TWinControl parent属性,而第二个不可以?
谢谢
发布于 2008-11-25 11:02:10
第一种类型转换不使用检查,它假设程序员是正确的,并继续执行。第二次强制转换使用了一些健全性检查。(如果强制转换无效,则会导致异常)。我认为在这种情况下,编译器被混淆了,因为类似命名的属性。它甚至可能是一个过于夸张的优化器。
至少,
var
wc : TWinControl;
begin
wc := (WebBrowser as TWinControl);
wc.Parent := Self;
end;很管用。因此,这是一种规避。
https://stackoverflow.com/questions/316949
复制相似问题