类引用作为属性

LaK*_*ven 7 delphi oop properties reference fpc

谷歌对这些类型的搜索毫无用处,因为你得到了数亿个结果,绝对没有一个与特定问题有关.

问题很简单:

  • 是否可以在Delphi中使用类引用属性?
  • 如果是这样,怎么样?

这是我试过的......

type

  TMyObject = class
    // ...
  end;

  TMyObjectClass = class of TMyObject

  TMyObjectA = class(TMyObject)
    // specifics here
  end;

  TMyObjectB  =class(TMyObject)
    // specifics here
  end;

  TMyComponent = class(TComponent)
  private
    FObjectType: TMyObjectClass;
  published
    property ObjectType: TMyObjectClass read FObjectType write FObjectType;
  end;
Run Code Online (Sandbox Code Playgroud)

上面的代码编译得很好,但是Object Inspector根本没有显示ObjectType属性.

我的目标(如果您还没有猜到)是为了让我可以从特定基类中选择一个类后代,以使相同的组件以不同的方式运行.

我想这样做,以便组件不需要直接了解子类(它需要完全模块化).

让我说清楚一点:我不能使用Enum在子类类型之间进行选择,因为组件不能直接链接到子类类型(在这种特殊情况下根本不可能)

无论如何......提前谢谢!

Pol*_*Pol 5

您可以找到从特定基类继承的所有类:Delphi:在运行时查找从给定基类下降的类?并使用以下值将列表作为特殊属性TPropertyEditor.

  • 为了澄清上述......事实证明我完全错了,@ DavidHeffernan是正确的!RTTI不能在设计时用于内省在活动项目中定义的类型.它只能对包中注册的类型执行此操作! (4认同)