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

Are generic TObjectlist operations Delete and Move typesafe for descendants?

我将 TKeyframe 作为 class,并且 Keyframes: TObjectlist<TKeyframe> 在基础 class TTrack 中,但在 TTrack 的后代中,关键帧包含 TKeyframe 的后代,具有附加字段和适当的类型转换。

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

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

是的,TObjectList<T> that affects polymorphism and System.Move里面什么都没有,只是移动内存。

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