加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 03:50:18 所属栏目:大数据 来源:网络整理
导读:我的理解是静态关键字是为了与.NET兼容而引入的(同时还有严格的) class TExample class procedure First; class procedure Second; static; 第一和第二程序之间的差异是: – 首先可以在后代课程中重写 首先传递一个引用TExample类的隐式self参数. 类过程第
我的理解是静态关键字是为了与.NET兼容而引入的(同时还有严格的)
class TExample
  class procedure First;
  class procedure Second; static;

第一和第二程序之间的差异是: –

>首先可以在后代课程中重写
>首先传递一个引用TExample类的隐式self参数.

类过程第二个不能被覆盖并且不传递任何参数,因此是.NET兼容的.因此,在原生代码中使用static关键字是否有任何意义,因为Delphi和&之间存在分歧.棱镜语法?

解决方法

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;

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读