什么是托管类型?它们是否仅适用于Delphi?它们是否仅适用于Windows?

6

总结:

请查看下面的知识丰富评论。

==============================================================

我在很多stackoverflow Delphi主题中看到了managed types这个术语。例如,在正确初始化/终止的主题中提到它。然而,当我谷歌managed types时,似乎大多数链接都与C++或.NET相关。例如,请参见MSDN页面。有人能否帮忙评论Delphi中定义的托管类型是什么?考虑到Delphi for POSIX / MacOS正在诞生,托管类型是否特定于Windows?感谢您提前付出的努力和时间!

PS:正确初始化/终止的主题:
在Delphi中哪些变量在何时初始化?
Delphi变量默认情况下是否初始化为一个值?
如何在Delphi 7解构函数中释放对象数组?
在Delphi 2009中,我需要释放变体数组吗?

2个回答

8
在Delphi环境中,托管类型是指Delphi编译器自动生成生命周期管理代码的类型。这包括:
- 字符串 - 动态数组(已删除) - 包含其他托管类型的记录 - 接口 - (后期编辑)匿名方法 - (后期编辑)变体
由于Delphi上下文中的托管类型是根据Delphi编译器生成的内容定义的,因此它们是特定于Delphi的。
在.NET世界中,开发人员不需要管理分配的内存的生命周期,因为.NET提供了自动机制:垃圾回收器。但.NET包括使用CLR之外的东西的能力(例如:使用不针对CLR的本机DLL)。那些代码通常被称为未托管和不安全。
在.NET上下文中,托管与CLR自动管理的内容相关,因此这是.NET特定的术语!

1
不,它不是排他性的。我使用“包括这些”来介绍列表。现在我想不到其他的,但我不能保证这是完整的列表。 - Cosmin Prund
2
@Xichen Li,肯定有一个列表:编译器确切地知道哪些类型是被管理的,哪些类型不是。也许Embarcadero的某个人可以告诉我们确切的列表,或者有更好的谷歌搜索技巧的人可以帮忙。 - Cosmin Prund
1
“开放数组”是正确的术语吗?我认为托管的数组被称为动态数组,而开放数组只是一种参数传递技术。 - CodesInChaos
@Cosmin:谢谢!那我就等一下“那个”列表。 :D - SOUser
1
就文档而言,该列表包括:(Windows 32 平台的内存管理) “长字符串、宽字符串、动态数组、变体和接口都是堆分配的,但它们的内存是自动管理的。”。但是由于它没提及方法引用,我猜我们不能依赖这点。 - Sertac Akyuz
显示剩余4条评论

2

请参考Barry Kelly的回答相关主题。 由于托管类型是一种语言特性,因此在Mac OS等平台上不应该有显著变化。


谢谢你的帮助!Barry提到了一些托管类型的示例列表。然而,那个列表是排他性的吗? - SOUser
3
当 Barry 写下这个列表时,它可能是全面的,但后来添加的匿名方法没有包含在内。 - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接