5

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

现在,我不是 COM 专家,但我的印象是类中的每个公开项目都有自己的 GUID。因为我们会从每个值从 2 个 Guid(Property Get 和 Property Let)变成一个他们只使用一个(公共字段)的情况,我期待这会破坏二进制兼容性 - 但它似乎没有没那么做。

谁能解释为什么?

4

2 回答 2

7

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

这难道不是 VB6 可以说比 .Net更好的少数几个领域之一吗?

  • 在 .Net 中,公共字段的行为与公共属性不同,这使得一些重构变得困难并引起混乱
  • 在 VB6 中,公共字段的行为与公共属性完全一样,这就是为什么可以在不影响二进制兼容性的情况下进行切换。在幕后,编译器为公共字段生成属性获取和设置例程。从某种意义上说,VB6 已经自动实现了属性(现在在 VB10 中被宣传为“新功能”)......
于 2010-05-26T16:35:55.077 回答
1

我认为它比这更微妙一些。您将获得 COM 接口的 GUID(不是每个单独的字段/方法)。据我了解,二进制兼容性会尝试确定您当前编译的接口是否向后兼容 DLL 的参考版本(假设您有一个),并且仅在它们不兼容时才更改 GUID。

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

于 2010-05-26T15:34:42.577 回答