delphi – 如何在类型常量中包含方法指针?

前端之家收集整理的这篇文章主要介绍了delphi – 如何在类型常量中包含方法指针?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在记录中使用对象的过程,如下所示:
  1. TCommandRec = record
  2. name: string;
  3. fn: procedure of object;
  4. end;

我可以通过赋值创建一个数组:

  1. commands: array [0..1] of TCommandRec;
  2.  
  3. ...
  4.  
  5. commands[0].name := '-help';
  6. commands[0].fn := DoHelp;
  7. commands[1].name := '-load';
  8. commands[1].fn := DoLoad;

我真正想做的是声明一个常量:

  1. const
  2. cmds: array [0..1] of TCommandRec =
  3. (
  4. (name: '-help'; fn: DoHelp),(name: '-load'; fn: DoLoad)
  5. );

但是,我收到了DoHelp和DoLoad的错误 – 期望的常量表达式.这是一类的两种方法.是否有一些语法我需要用来使这项工作或我在运行时坚持构建数组?

解决方法

对象的方法是所谓的双指针类型.它封装了以下信息:

>功能的地址.
>对象的地址或主题.

前者在编译时是已知的,但通常后者不是.这就是您通常需要在运行时创建这些东西的原因.

如果您可以安排在编译时知道主题,那么您可以声明记录类型的类型常量.例如:

  1. type
  2. TMyRecord = record
  3. Foo: procedure of object;
  4. end;
  5.  
  6. TMyStaticClass = class
  7. class procedure Foo;
  8. end;
  9.  
  10. class procedure TMyStaticClass.Foo;
  11. begin
  12. end;
  13.  
  14. const
  15. MyRecord: TMyRecord = (Foo: TMyStaticClass.Foo);

当然,如果你的函数作为类方法而不是实例方法可行,那么这对你有用.我只是添加上面的代码来说明你可以拥有常量方法指针,只要主题是编译时常量.

猜你在找的Delphi相关文章