如何解决泛型 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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。