delphi - 如何确定 Delphi 对象是否属于特定类而不是任何后代类?

标签 delphi class-design

我有这些类(class)和一个过程:

 TParent = class(TObject);
 TChild1 = class(TParent);     
 TChild2 = class(TParent);

 Procedure DoSomething(obj:TParent);

我想做的是当 objTParent 而不是后代时引发异常。

我想过做这样的事情:

if obj.classname = TParent.classname then raise exception.create....

但这似乎有点hackish(TM)

更多:我的目的是能够传递共享属性/过程的对象。经过更多思考,根本不需要 TParent 对象,我需要的是我的答案中显示的接口(interface)对象。

最佳答案

您可能会发现以下 TObject 类方法很有用:

  • ClassType - 返回对象的类
  • ClassParent - 给出该类的父类
  • InheritsFrom - 如果一个类继承于另一个类则返回(即检查整个继承链)。它包括当前类(class)。

因此,您可以使用以下代码(未经测试,目前没有 Delphi)来实现您想要的(从 TParent 下降,但不是 TDescendant?):

if obj.ClassType.InheritsFrom(TParent)
  and not obj.ClassType.InheritsFrom(TDescendant) then...

或者,如果我误解了,而您只是想查看一个对象是否是 TParent,而不是任何类型的后代,请尝试:

if obj.ClassType = TParent then...

Delphi 远远领先于时代,通过 metaclasses 提供对类的访问。 ,因此您不仅可以检查类名,还可以访问实际的类对象。

关于delphi - 如何确定 Delphi 对象是否属于特定类而不是任何后代类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5255341/

相关文章:

delphi - 失去焦点时保持 InPlaceEditor 突出显示

delphi - 如何在 Lazarus 中切换 Win32/64 代码生成?

php - 制作 PDO mysql 静态连接类的最佳方法?

c - C 中的 *.r 文件是什么?

database-design - 将整数与字符串用于 "type"值(数据库和类设计)

database - 如何执行存储在数据库中的代码?

delphi - 如果文本宽度大于 TEdit 的宽度,如何显示一些指示符

design-patterns - 从用例到类图 - 我该怎么做?

c++ - getObjByName() 应该返回什么?

listview - 如何防止 ListView 在 item.count 更改时跳转到选定/焦点行?