如何从助手类函数获取“帮助”类?

我正在尝试编写一个帮助器类函数,而无需静态引用该帮助器类:

  TMyEnum = (meA,meB,meC);
  TMyEnumHelper = record helper for TMyEnum
  public
    class function InRange(AValue : integer) : Boolean; static;
  end;

...

class function TMyEnumHelper.InRange(AValue : Integer) : Boolean;
begin
  Result := (
    (AValue >= Ord(Low(TMyEnum))) and
    (AValue <= Ord(High(TMyEnum)))
  );
end;

有没有一种方法可以动态获取帮助类? 我的意思是以下代码:

class function TMyEnumHelper.InRange(AValue : Integer) : Boolean;
begin
  Result := (
    (AValue >= Ord(Low(HelpedClass))) and
    (AValue <= Ord(High(HelpedClass)))
  );
end;

我尝试使用Self,但是Delphi说E2003 Undeclared identifier: 'Self'

zchng 回答:如何从助手类函数获取“帮助”类?

静态类方法没有“ self”参数。他们也不能访问任何实例成员。 (他们仍然有权访问类字段,类属性和类方法。)

在这种情况下(帮助程序是记录帮助程序),必须将类方法声明为静态方法。

正如@David指出的那样,普通的类方法(非静态)可以使用“ Self”键来引用其类型,但只能在引用类时使用。
示例:

message.setRecipients(RecipientType.TO,javax.mail.internet.InternetAddress.parse(  recipientEmailAddress ));

如果枚举是连续的,则可以使用泛型“ helper”方法通过RTTI获取范围。

type
  TMyClass = class
  end;
  TMyClassHelper = class helper for TMyClass   
     class function NameOfClass : String;
  end;

class function TMyClassHelper.NameOfClass : String;
begin
  Result := Self.ClassName;
end;
本文链接:https://www.f2er.com/2679101.html

大家都在问