VB6关键字Set是什么意思?

9

我正在浏览一段旧的VB6代码,发现其中有这样一段:

 Set AST = CreateObject("ADODB.Stream")

我有使用VB6和VB.NET的经验,但在我的VB6项目中从未使用过Set关键字。我在互联网上进行了大量研究,了解了Set的用途,我所知道的仅是在VB.NET中使用Properties时的用法。

Public Property myProperty As String
    Get
      Return _myProperty
    End Get
    Set(value as String)
      _myProperty = value
    End Set
End Property

我认为上述代码中使用了不同的Set方式。这两种方法有什么区别?我想知道在VB6中,Set是用来做什么的。

1个回答

11

Set 会给 AST 变量分配一个新的引用,而不是给 (当前由 AST 引用的对象) 的默认属性分配一个值。


网上关于VB6的文档并不多,但1 一些 VB.Net 帮助文档仍然提到了旧的方法。

请参见 Default Property Changed for Visual Basic 6 Users

在 Visual Basic 6.0 中,对象支持默认属性。例如,在 Label 控件上,Caption 是默认属性,以下示例中的两个赋值语句是等效的。

Dim lbl As Label 
lbl = "Important" 
lbl.Caption = "Important" 

虽然默认属性使得在编写Visual Basic代码时可以使用一定程度的速记,但它们具有几个缺点:

...

  • 默认属性使得在Visual Basic语言中需要使用Set语句。下面的示例显示了如何使用Set来指示要分配一个对象引用而不是默认属性。
Dim lbl1 As Label, lbl2 As Label 
lbl1 = "Saving" ' Assign a value to lbl1's Caption property. 
lbl2 = lbl1       ' Replace lbl2's Caption property with lbl1's. 
Set lbl2 = lbl1   ' Replace lbl2 with an object reference to lbl1. 
因此,在VB.Net中,LetSet已经过时(事实上,在VB 6中,Let已经基本过时了),因为语言规则发生了改变。如果A是一个引用,那么赋值A = B总是会将一个新的引用分配给A


不完全无关:在VB.NET中仍然存在默认属性,但仅适用于索引属性。例如,在.NET中,默认属性允许您编写myList(index)而不是myList.Item(index) - Steven Liekens
1
@StevenLiekens - 我链接的页面已经涵盖了这一点 - 它涵盖了VB 6和.NET的默认属性,并突出了它们之间的区别,例如“在Visual Basic 2008中,除非它们带有参数,否则不支持默认属性”。我想让我的答案集中在VB经典的Set上。 - Damien_The_Unbeliever
哦...我在阅读MSDN页面之前停止了,没有看到“除非它们带有参数”。我的错。 - Steven Liekens
5
+1 但是VB6文档仍然可以在MSDN上找到。从VB6用户指南中,这里有SetLet将属性或方法设置为默认值 - MarkJ
@MarkJ - 我的谷歌功夫让我失望了。我搜索了相当长的时间,但我能找到的只有有关迁移到VB.NET的有用指南。 - Damien_The_Unbeliever

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接