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

确定Delphi 6类对象是否是使用字符串形式的类名的派生类?

发布时间:2020-12-15 09:38:21 所属栏目:大数据 来源:网络整理
导读:出于记录和报告的原因,我创建了具有属于异常的类名和消息的对象.我这样做,所以我不必管理Exception对象的生命周期.我想要做的是恢复RTTI标识的优点,它允许您使用Delphi 6中的“is”运算符来判断对象是否来自给定的类. 有没有办法以字符串形式使用类名来判断
出于记录和报告的原因,我创建了具有属于异常的类名和消息的对象.我这样做,所以我不必管理Exception对象的生命周期.我想要做的是恢复RTTI标识的优点,它允许您使用Delphi 6中的“is”运算符来判断对象是否来自给定的类.

有没有办法以字符串形式使用类名来判断字符串包含的类是否派生自另一个类?

假设我有一个存储在strClassName中的对象类,该类是“derivedClass”.此外,derivedClass派生自baseClass.是否有一个我可以编写的函数可以判断strClassName中的字符串形式的类是否是从baseClass派生的?例如:

// Hypothetical function that returns TRUE if the class in strClassName is
//  derived from the class passed in theBaseClass
function isDerivedClass(strClassName: string; theBaseClass: TAnyClass): boolean;

那种方法的主体会是什么样子?

解决方法

function isDerivedClass(strClassName: string; theBaseClass: TClass): boolean;
begin
  Result := FindClass(strClassName).InheritsFrom(theBaseClass);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  RegisterClass(TLabel); // must be registered to be found by FindClass/GetClass

  if isDerivedClass('TLabel',TWinControl) then
    ..

如果您不希望在找不到名为’strClassName’的类时引发异常,请使用GetClass而不是FindClass:

function isDerivedClass(strClassName: string; theBaseClass: TClass): boolean;
var
  aClass: TClass;
begin
  Result := False;
  aClass := GetClass(strClassName);
  if Assigned(aClass) then
    Result := aClass.InheritsFrom(theBaseClass);
end;

(编辑:李大同)

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

    推荐文章
      热点阅读