代码之家  ›  专栏  ›  技术社区  ›  Martin Milan

为什么公共字段和属性可互换二进制兼容?

  •  5
  • Martin Milan  · 技术社区  · 14 年前

    在日常工作中,我在一个vb6(我知道,但不要嘲笑受折磨的…)应用程序上工作,该应用程序使用了我们编写的许多库(也使用了非常著名的vb6)。其中一个支持库有一批通过公共属性公开的私有成员,我被要求删除这些属性,并将私有成员变量提升为与原始属性同名的公共字段。

    现在,我不是COM专家,但我觉得类中的每个公开项目都有自己的guid。因为我们将从每个值从2个guid(property get和property let)变为只使用一个guid(public字段)的情况,所以我希望这会破坏二进制兼容性——但似乎没有做到这一点。

    有人能解释为什么吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Paolo    14 年前

    我觉得这比那要微妙一点。您将获得COM接口的GUID(而不是每个单独的字段/方法)。据我所知,二进制兼容性试图确定当前编译的接口是否与DLL的引用版本向后兼容(假设您有一个),并且仅在不兼容的情况下更改guid。

    因此,我也感到惊讶的是,它决定删除所有的get/set方法都是兼容的:/

        2
  •  6
  •   MarkJ    12 年前

    不,它 还没有 因为它破坏了兼容性 还没有 已移除属性get和属性let方法。只是编译器现在正在为您编写它们。

    这不是少数几个可以证明vb6的领域之一吗? 更好的 比.NET?

    • 在.NET中,公共字段的行为与公共属性不同,并且 makes some refactorings difficult and causes confusion .
    • 在VB6中,公共字段的行为与公共属性完全相同,这就是为什么可以在不影响二进制兼容性的情况下进行切换的原因。在幕后,编译器 generates 属性获取和设置公共字段的例程。从某种意义上说,vb6已经自动实现了属性(现在 advertised 作为VB10中的“新功能”…