Delphi的静态关键字是否在本机代码中有任何意义?

Mik*_*-UK 8 delphi oop class

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

class TExample
  class procedure First;
  class procedure Second; static;
Run Code Online (Sandbox Code Playgroud)

程序之间的差异First,并Second为: -

  1. First 可以在后代类中重写
  2. 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)

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