gpt4 book ai didi

delphi - Delphi 的 static 关键字在纯 native 代码中是否有任何意义?

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

我的理解是引入 static 关键字是为了与 .NET 兼容(以及 strict)

class TExample
class procedure First;
class procedure Second; static;

过程FirstSecond之间的区别是:-

  1. First 可以在后代类中被覆盖
  2. First 传递引用 TExample 类的隐式 self 参数。

类过程Second 无法被重写,并且不传递任何参数,因此与.NET 兼容。既然 Delphi 和 Prism 语法之间存在差异,那么在纯 native 代码中使用 static 关键字还有什么意义呢?

最佳答案

Static class methods have no hidden class reference argument 。因此,它们与普通旧函数指针的赋值兼容,因此可用于与 Windows API 和其他 C API 进行交互。示例:

type
TForm = class
private
class function NonStaticWndProc (wnd: HWND; Message: Cardinal;
wParam: WPARAM; lParam: LPARAM): LRESULT;
class function StaticWndProc (wnd: HWND; Message: Cardinal;
wParam: WPARAM; lParam: LPARAM): LRESULT; static;
procedure RegisterClass;
end;

procedure TForm.RegisterClass;
type
TWndProc = function (wnd: HWND; Message: Cardinal;
wParam: WPARAM; lParam: LPARAM): LRESULT;
var
WP: TWndProc;
WindowClass: WNDCLASS;
begin
//WP := NonStaticWndProc; // doesn't work
WP := StaticWndProc; // works
// ...
TWndProc (WindowClass.lpfnWndProc) := WP;
Windows.RegisterClass (WindowClass);
end;

(当然,您可以使用全局函数,但除了全局函数之外,静态类函数与类有明确的关联。)

关于delphi - Delphi 的 static 关键字在纯 native 代码中是否有任何意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1142548/

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