我的理解是static引入了关键字以与.NET兼容(以及strict)
class TExample
class procedure First;
class procedure Second; static;
Run Code Online (Sandbox Code Playgroud)
程序之间的差异First,并Second为: -
First 可以在后代类中重写First传递一个引用TExample该类的隐式self参数.类过程Second不能被覆盖并且不传递任何参数,因此与.NET兼容.那么,static在原生代码中使用关键字是否有任何意义,因为Delphi和Prism语法之间存在分歧?
Mor*_*tel 21
静态类方法没有隐藏的类引用参数.因此,它们与普通的旧函数指针兼容,因此可用于与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;
Run Code Online (Sandbox Code Playgroud)
(当然,您可以使用全局函数,但除了全局函数之外,静态类函数与类有明确的关联.)