【问题标题】:What are managed types? Are they specific to Delphi? Are they specific to Windows?什么是托管类型?它们是特定于德尔福的吗?它们是特定于 Windows 的吗?
【发布时间】:2011-03-18 11:45:37
【问题描述】:

总结:

请检查以下知识渊博的cmets。

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

我在很多 stackoverflow Delphi 主题中看到了managed types 这个词。比如correctly initializing/finalizing的话题中就提到了。但是,当我在 Google managed types 上搜索时,似乎大多数链接都与 C++ 或 .NET 有关。例如,请参阅MSDN page。有人可以帮助评论 Delphi 中定义的托管类型吗?鉴于用于 POSIX/MacOS 的 Delphi 正在诞生,托管类型是特定于 Windows 的吗?提前感谢您的努力和时间!

PS:correctly initializing/finalizing的话题:
Which variables are initialized when in Delphi?
Are delphi variables initialized with a value by default?
How should I free an array of objects in a Delphi 7 destructor?
In Delphi 2009 do I need to free variant arrays?

【问题讨论】:

    标签: delphi types managed


    【解决方案1】:

    Delphi 的上下文中,托管类型是Delphi 编译器自动为其生成生命周期管理代码的类型。这包括:

    • 字符串
    • 打开动态数组
    • 包含其他托管类型的记录
    • 接口
    • (稍后编辑)匿名方法
    • (稍后编辑)变体

    因为Delphi 上下文中的托管类型是根据 Delphi 编译器生成的内容定义的,所以它们是特定于 delphi 的。


    在 .NET 世界中,开发人员不需要管理已分配内存的生命周期,因为 .NET 提供了一种自动机制来执行此操作:垃圾收集器。但是 .NET 包括处理 CLR 之外的事物的能力(例如:使用不针对 CLR 的本机 DLL)。该代码通常被称为未管理且不安全。

    在 .NET 的上下文中,托管与 CLR 自动管理的内容相关,因此这是 .NET 的特定术语!

    【讨论】:

    • @Cosmin:谢谢你的帮助!您提到了四种托管类型。你的名单是独家的吗?我的意思是,您的列表the Delphi 中的托管类型列表吗? (感谢您对 .NET 托管类型的帮助。)
    • 不,它不是排他的。我用this includes 介绍这个列表。现在我想不出任何其他的,但我不能保证这是完整的列表。
    • @Xichen Li,肯定有一个清单:编译器准确地知道哪些类型是托管的,哪些类型不是托管的。也许 Embarcadero 的某个人可以告诉我们确切的名单。或者有更好的谷歌搜索技能的人。
    • Open Arrays 是正确的术语吗?我以为托管的称为动态数组,而开放数组只是一种参数传递技术。
    • 就文档而言,列表是:(Memory Management on the Win32 Platform) "长字符串、宽字符串、动态数组、变体和接口是堆分配的,但它们的内存是自动管理的。”。但是,由于它省略了方法引用,我想我们不能指望它。
    【解决方案2】:

    请参阅Barry Kelly's answer 到相关线程。 由于托管类型是一种语言功能,因此不应在 Mac OS 等平台上进行重大更改。

    【讨论】:

    • 感谢您的帮助! Barry 提到了托管类型的示例列表。尽管如此,该列表是唯一的吗?
    • 该列表在 Barry 编写时可能已经很全面了,但它缺少后来添加的匿名方法。
    • @David:感谢您的评论!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 2019-10-12
    • 1970-01-01
    • 2013-10-31
    • 2011-04-28
    • 1970-01-01
    相关资源
    最近更新 更多