gpt4 book ai didi

vb.net - VB6 中的 Attribute 关键字有什么作用?

转载 作者:行者123 更新时间:2023-12-04 14:10:55 25 4
gpt4 key购买 nike

我正在将一些 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很快就变得无关紧要了。

最佳答案

我写了一些关于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 函数,您将很快看到它如何让您“快捷”“命名空间”。

移植时您不必担心这一点,除非它设置为 True。任何将其设置为 True 的类都会让您头疼,因为此“静态”类的客户端不必通过其显式名称调用它,但在您将代码移植到 .Net 之后必须这样做。

Attribute VB_PredeclaredId = False


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

A class module has a default instance variable if its VB_PredeclaredId attribute or VB_GlobalNamespace attribute has the value "True". This default instance variable is created with module extent as if declared in a containing an element whose was the name of the class.

If this class module’s VB_PredeclaredId attribute has the value "True", this default instance variable is given the name of the class as its name. It is invalid for this named variable to be the target of a Set assignment. Otherwise, if this class module’s VB_PredeclaredId attribute does not have the value "True", this default instance variable has no publicly expressible name.

If this class module’s VB_GlobalNamespace attribute has the value "True", the class module is considered a global class module, allowing simple name access to its default instance’s members...

Note that if the VB_PredeclaredId and VB_GlobalNamespace attributes both have the value "True", the same default instance variable is shared by the semantics of both attributes.



Attribute VB_Creatable = True


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

Attribute VB_Exposed = False


简单地控制模块的范围。 True 是公共(public)的,False 是内部的。它与 VB_Creatable 结合使用至 create a matrix of scoping behavior.

Attribute VB_Description = "Some text here"


大致相当于 <Summary>文档评论。此文本将显示在 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 加载项使用的自定义属性。我不能具体说这些做了什么,但它们不太可能需要保存。

关于vb.net - VB6 中的 Attribute 关键字有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33648764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com