任何人都可以告诉我为什么第二次演员无法在Delphi 7中编译?
var
WebBrowser: TWebBrowser;
begin
WebBrowser := TWebBrowser.Create(Self);
TWinControl(WebBrowser).Parent := Self;
(WebBrowser as TWinControl).Parent := Self; // fail here
end
Run Code Online (Sandbox Code Playgroud)
TWebBrowser中的Parent是一个只读的IDispatch属性,但为什么第一个转换看到TWinControl父属性ok,但第二个看不到?
谢谢
第一个演员使用没有检查,它假定程序员是正确的继续.第二个演员使用了一些健全性检查.(如果演员表无效,则导致异常).我认为在这种情况下,编译器因为命名属性一样而感到困惑.它甚至可能是一个过于激进的优化者.
至少,
var
wc : TWinControl;
begin
wc := (WebBrowser as TWinControl);
wc.Parent := Self;
end;
Run Code Online (Sandbox Code Playgroud)
作品.所以有规避.
| 归档时间: |
|
| 查看次数: |
1181 次 |
| 最近记录: |