gpt4 book ai didi

delphi - 为什么当 btn 为 NIL 时我可以访问 btn.Caption?

转载 作者:行者123 更新时间:2023-12-03 14:39:44 26 4
gpt4 key购买 nike

为什么这段代码不会崩溃? T 为零。如果Tnil,如何访问Caption

procedure Crash;                                                                          
VAR T: TButton;
begin
T:= NIL;
T.Caption:= ''; <---------- this works
end;

最佳答案

TButton 控件是 Win32 Button 控件的包装器。它使用 Windows 消息系统对其进行操作。这样做的核心方法,TControl.Perform(),有一个内置的保护措施,防止在 Selfnil 时发送消息:

function TControl.Perform(Msg: Cardinal; WParam: WPARAM; LParam: LPARAM): LRESULT;
var
Message: TMessage;
begin
Message.Msg := Msg;
Message.WParam := WParam;
Message.LParam := LParam;
Message.Result := 0;

if Self <> nil then // <-- here
WindowProc(Message);

Result := Message.Result;
end;

Caption 是一个属性,其 setter 使用非虚拟 TControl.GetText()TControl.SetText() 方法,这可以可以安全地调用 nil 对象,因为它们的功能依赖于向控件发送各种消息(WM_GETTEXTLENWM_SETTEXT),并且仅涉及局部变量或传递参数。因此,当 nil 时,不会访问实际对象,因此不会崩溃。

关于delphi - 为什么当 btn 为 NIL 时我可以访问 btn.Caption?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51161223/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com