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

时间:2010-05-26 14:57:17

标签: com vb6 guid binary-compatibility

在白天的工作中,我使用的是VB6(我知道,但不要嘲笑受折磨的......)应用程序,它使用了我们编写的许多库(也是在着名的VB6中)。其中一个支持库有大量私有成员通过公共属性公开,我被要求删除属性,并将私有成员变量提升到与原始属性同名的公共字段。

现在,我不是COM专家,但我的印象是一个类上的每个暴露项都获得了它自己的GUID。因为我们将从每个值从2个Guids(Property Get和Property Let)变为仅使用一个(公共字段)的情况开始,我期望这会破坏二进制兼容性 - 但它似乎没有做完了。

任何人都可以解释原因吗?

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:1)

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

因此我还惊讶于它决定删除所有get / set方法兼容:/