Delphi   发布时间:2022-04-11  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了delphi – 如何将任意类型的方法传递给过程并识别它?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个线程库,它有三个不同方法类型的构造函数.我希望它们合并为一个逻辑,以便在构造函数中区分它们.可能吗?由于有值等的TValue,方法类型是否有类似的东西?

我现在支持以下类型;

TAgThreadMethod1 = procedure of object;
TAgThreadMethod2 = procedure;
TAgThreadMethod3 = procedure(const AThread: TAgThread) of object;

而构造函数是这样的

constructor Create(const AOnRun: TAgThreadMethod1); overload; virtual;
constructor Create(const AOnRun: TAgThreadMethod2); overload; virtual;
constructor Create(const AOnRun: TAgThreadMethod3); overload; virtual;

作为参,我不希望用户能够在构造之后的某个时间更改worker方法.因此,如果存在可以在单个构造函数中执行此类操作的解决方案,也欢迎;

constructor Create
            (const AOnRun: [Some type which can hold arbitrary method types]);
begin

  // code to identify the method contained in AOnRun.
  // if supported,assign it the correct handler.

end;

解决方法

没有任何好的方法可以做到这一点,因为方法指针的整个点在稍后的某个时候被调用,除非你知道它的签名,否则你不能这样做.因此,失去签名之间的区别是非常适得其反的.

如果你只想在对象中存储一种类型的调用,你可以让三个构造函数分别创建一个带有统一签名的匿名方法,该签名包含对这三种类型的调用,并且只存储它而不必处理多个不同的方法类型.但具体而言,你要求的东西是行不通的.

大佬总结

以上是大佬教程为你收集整理的delphi – 如何将任意类型的方法传递给过程并识别它?全部内容,希望文章能够帮你解决delphi – 如何将任意类型的方法传递给过程并识别它?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。