Attribute关键字在VB6中做了什么?

时间:2015-11-11 10:36:44

标签: vb.net vb6 vb6-migration

我正在将一些VB6代码转换为VB.Net。由于我的VB6安装似乎损坏无法修复,我使用记事本阅读原始源代码,可以看到文件顶部附近: -

Attribute VB_Name = "clsBulge"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Attribute VB_Description = "Some text here"
Attribute VB_Ext_KEY = "SavedWithClassBuilder" ,"Yes"
Attribute VB_Ext_KEY = "Member0" ,"collBulges"
Attribute VB_Ext_KEY = "Top_Level" ,"Yes"

并介绍其中的作品: -

Public Property Let Amplitude(ByVal vData As Double)
Attribute Amplitude.VB_Description = "Some text here"
    mvaInternal = vData
End Property

问题是,转换为VB.Net时,我是否需要担心这个问题?如果是这样,我在哪里可以找到所有这些东西的含义?

给出的问题和答案here表明不是,但并不是真正的权威来源。一个类似的问题问here很快就会陷入无效状态。

1 个答案:

答案 0 :(得分:7)

我写了一些关于VB Attributes in a VBA context的内容,但我可以总结一下这里有什么。

Attribute VB_Name = "clsBulge"

非常自我解释,这是班级的名称。要创建新的实例,您必须致电Dim foo = New clsBulge

Attribute VB_GlobalNameSpace = False

这个很有意思,通过设置为true,a global default instance will be created.当应用程序启动时,将自动创建类的实例并accessible via simple name access给它的公共成员。这有点难以解释,但是如果你看一下对象资源管理器中的内置VBA函数,你就会很快看到它是如何让你“快捷方式”的。 a"命名空间"。

移植时你不必担心这个,除非它被设置为True。任何设置为True的类都会让你头疼,因为这个"静态" class不必通过其明确的名称来调用它,但必须在将代码移植到.Net之后。

Attribute VB_PredeclaredId = False

VB_GlobalNameSpace相关,但语义略有不同。它大致相当于.Net中的静态类。只有......不,因为您仍然可以创建该类的其他实例。它也是described in the link above

  

如果类模块的VB_PredeclaredId属性或VB_GlobalNamespace属性的值为" True",则该模块具有默认的实例变量。使用模块范围创建此默认实例变量,就像在包含类的名称的元素中声明一样。

     

如果此类模块的VB_PredeclaredId属性具有值" True",则为此默认实例变量指定类的名称作为其名称。此命名变量无效为Set赋值的目标。否则,如果此类模块的VB_PredeclaredId属性没有值" True",则此默认实例变量没有可公开表达的名称。

     

如果此类模块的VB_GlobalNamespace属性具有值" True",则类模块被视为全局类模块,允许对其默认实例的成员进行简单的名称访问...

     

请注意,如果VB_PredeclaredIdVB_GlobalNamespace属性都具有值" True",则两个属性的语义共享相同的默认实例变量。

Attribute VB_Creatable = True

这个也很有趣。它与范围规则有关。基本上,如果将其设置为True,则可以从任何地方调用它的构造函数。它是公共的,可以在任何地方创建。但如果它设置为False,则相当于拥有内部ctor。

Attribute VB_Exposed = False

只需控制模块的范围。真是公开,假是内。它与VB_Creatablecreate a matrix of scoping behavior.

结合使用
Attribute VB_Description = "Some text here"

大致相当于<Summary> doc评论。此文本将显示在VB6(和VBA)对象浏览器中。如果我没记错的话,许多其他支持COM的语言都会使用它来达到同样的目的。实际上,您可以使用ComponentModel.Description attribute.为COM公开的.Net库生成这种确切的行为。如果您需要端口是COM可见的,那么您将要使用它以便客户端保留文档。

Attribute VB_Ext_KEY = "SavedWithClassBuilder" ,"Yes"
Attribute VB_Ext_KEY = "Member0" ,"collBulges"
Attribute VB_Ext_KEY = "Top_Level" ,"Yes"

这些是IDE加载项使用的自定义属性。我不能具体说出这些做了什么,但它们不太可能需要保留。