泛型 TObjectlist 操作 Delete 和 Move 对后代来说是类型安全的吗?

问题描述

我将 TKeyframe 作为一个类,在基类 TTrack 中使用 Keyframes: TObjectlist<TKeyframe>,但在 TTrack 的后代中,Keyframes 包含 TKeyframe 的后代以及附加字段和适当的类型转换。

TTrack 具有调用 Keyframes.Move 和 Keyframes.Delete 方法的方法,这些方法通常似乎与 TKeyframe 的后代一起正常工作。删除不在列表末尾的关键帧似乎可以正常工作,除非在特定情况下,当下一个关键帧中的一个附加字段被一些我没有做过的后续操作设置为 NaN 时能够隔离。

TList Delete 的源代码使用 System.Move 来移动类的指针,因此对我来说它看起来很安全。那么与 T 的后代一起使用是否安全? TList Move 为正在移动的项目强制转换为 T,所以看起来更狡猾,但到目前为止我还没有遇到任何问题。

解决方法

是的,TObjectList<T> 中没有任何东西会影响多态性,而 System.Move 只是移动内存。

要找出哪些代码将某些字段设置为意外值,我建议使用 data breakpoint

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...