delphi - 使用 (Object as TClass) 和 TClass(Object) 进行强制转换有什么区别

标签 delphi casting typecast-operator

遇到问题,其中 MyObj.classnameis(TMyClass.classname) 为 true 并且 TMyClass(MyObj) 有效,但 (MyObj as TMyclass).doSomething 抛出转换错误。

我真的不需要任何关于这些垃圾的帮助,尽管如果你想把它放在评论中那就太好了。我只是想知道 Obj as ClassClass(Obj) 之间的区别。

最佳答案

as-cast 检查实际的对象类型以确保转换有效,如果无效则引发异常。 “硬转换”(TMyClass(MyObj) 样式)不会进行检查,它只是告诉编译器假设转换是有效的。

如果您遇到 ClassNameIs 返回 true 但 as-cast 失败的情况,这意味着您在两个不同的单元中有两个具有相同名称的不同类,并且 as-cast 试图转换为错误的类。这也意味着您的硬转换正在转换为错误的转换,这可能会导致内存损坏。

运行完整的项目搜索“TMyclass =”以查看多个声明的位置,然后重命名其中一个类或使用完整的定义(obj as MyUnit.TMyClass),以便编译器知道您是哪个类尝试转换到。

关于delphi - 使用 (Object as TClass) 和 TClass(Object) 进行强制转换有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2449790/

相关文章:

用于将 float(64) 类型转换为字节的 python 轻量级解决方案

java - 将多个字符串转换为一个字符串,然后解析为 int

delphi - 未找到 TeEngine.pas

Delphi - 将字节数组转换为字符串

delphi - TObject 包含哪些数据?

sql - 使用 MySQL Cast 查找自定义字段内容相当于 Price 的 WordPress 帖子

delphi - 是否可以在 Delphi 中为通用记录创建类型别名

casting - 大查询 : Cast INT64 to BYTES (or binary representation)

c# - 为什么要转换为接口(interface)?

c++ - 重载 `To to = from;` 和 `To to = {from};` 中的转换构造函数和转换运算符