Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 为什么我应该避免在应用程序代码中使用类类型?_Delphi_Oop - Fatal编程技术网

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

Delphi 为什么我应该避免在应用程序代码中使用类类型?,delphi,oop,Delphi,Oop,德尔福在线文档说 “避免在应用程序代码中使用” 但是,在许多地方需要类类型。例如,当一个程序使用类System.Contnrs时,我需要一个对象的类类型将其传递到IndexOf()的参数中 类类型文档中此建议背后的原因是什么?给出此建议的最明显原因是针对希望编写如下代码的程序员: if obj.ClassType = TStringList then .... 只有当对象的类为TStringList时,该条件才会计算为true。但是,您通常希望为TStringList和任何后代运行条件代码

德尔福在线文档说

“避免在应用程序代码中使用”

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


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

给出此建议的最明显原因是针对希望编写如下代码的程序员:

if obj.ClassType = TStringList then
  ....
只有当对象的类为
TStringList
时,该条件才会计算为true。但是,您通常希望为
TStringList
和任何后代运行条件代码。在这种情况下,您可以写:

if obj is TStringList then
  ....
如果您需要知道实例是什么类,那么应该使用
ClassType
。如果您在
TClassList
实例中维护一个类列表,那么可以使用
ClassType
获取实例的元类