gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:34:32 31 4
gpt4 key购买 nike

我有这些类(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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com