为什么我应该避免在应用程序代码中使用ClassType?

mjn*_*mjn 8 delphi oop

Delphi在线文档说

"避免在应用程序代码中使用ClassType ".

但是,有许多地方需要类类型.例如,当程序使用System.Contnrs类时.TClassList,我需要一个对象的ClassType在IndexOf()的参数中传递它.

ClassType文档中此建议背后的原因是什么?

Dav*_*nan 18

给出这个建议的最明显的原因是想要编写如下代码的程序员:

if obj.ClassType = TStringList then
  ....
Run Code Online (Sandbox Code Playgroud)

如果对象的类是,则该条件仅评估true TStringList.但是,通常您会希望运行条件代码TStringList和任何后代.在这种情况下你写:

if obj is TStringList then
  ....
Run Code Online (Sandbox Code Playgroud)

如果您需要知道实例是什么类,那么ClassType您应该使用它.如果要维护TClassList实例中的类列表,则可以随意使用它ClassType来获取实例的元类.