我正在将一些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时,我是否需要担心这个问题?如果是这样,我在哪里可以找到所有这些东西的含义?
答案 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_PredeclaredId
和VB_GlobalNamespace
属性都具有值" True",则两个属性的语义共享相同的默认实例变量。
Attribute VB_Creatable = True
这个也很有趣。它与范围规则有关。基本上,如果将其设置为True
,则可以从任何地方调用它的构造函数。它是公共的,可以在任何地方创建。但如果它设置为False,则相当于拥有内部ctor。
Attribute VB_Exposed = False
只需控制模块的范围。真是公开,假是内。它与VB_Creatable
到create 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加载项使用的自定义属性。我不能具体说出这些做了什么,但它们不太可能需要保留。