Delphi 通过类类型参数进行类型转换

Delphi 通过类类型参数进行类型转换,delphi,Delphi,如何使用objectclassType参数进行typecast (obj as obj.classType).items[i]...//obj.classType = TList<myType> 在我的程序中,有一个对象实际上属于类TList,我担心对system.classes.TList类型进行强制转换可能会在我的程序中导致一些错误。这样进行强制转换是不可能的。这是因为Delphi是一种静态类型语言 Imagibe您可以编写如下代码: (obj as obj.classType

如何使用object
classType
参数进行
typecast

(obj as obj.classType).items[i]...//obj.classType = TList<myType>

在我的程序中,有一个对象实际上属于类
TList
,我担心对
system.classes.TList
类型进行强制转换可能会在我的程序中导致一些错误。

这样进行强制转换是不可能的。这是因为Delphi是一种静态类型语言

Imagibe您可以编写如下代码:

(obj as obj.classType).items
由于if
obj.classType
的值在编译时是未知的,因此编译器在编译时无法知道
项是否存在,更不用说如何访问它等等

至于您关于列表类的目标,泛型和非泛型列表类型除了
TObject
之外没有共享一个共同的祖先。你所尝试的是完全不可能的


无论你的问题是什么,你都需要找到一个不同的解决方案

不能使用对象的
ClassType
属性对对象进行类型转换。您需要静态地指定属性所属的实际类,以便可以将对象强制转换为该类,例如:
(obj作为TList)。items[i]…
。否则,您必须通过
System.RTTI
单元类使用增强型RTTI来访问所需的属性。尽管
TList
TList
具有相似的属性,但它们实际上并没有以任何方式相互关联,因此不能将
TList
对象强制转换为
TList
对象,反之亦然,编译器将使用指定的类型。例如,如果我只需要为泛型调用此代码。
TList
,简单地说,在执行过程中,我不知道其中的类型(
TList
)?在这种情况下该怎么办?我不理解你在评论中提出的问题。如果我们只讨论不同类型的
泛型
,而不是通常类型的
TList
,那么我该如何对这种类型进行类型转换?例如,
(obj作为TList).items
,只有在运行时才有另一个类,而不是
TMyClass
。您也不能这样做。你需要帮助解决你的问题,但你提供的是我已经解释过的解决方案,这是行不通的。我想这个问题现在已经解决了。如果你仍然需要帮助,这将是一个新的问题,你应该问的实际问题。
(obj as obj.classType).items