“=”和“:=”有什么区别?

6

我相信这很简单,但我找不到正确的字符串来获取谷歌搜索结果。在 VB.NET 中,等号(=)和冒号后跟等号(:=)有什么区别?

3个回答

16

在VB.Net中,:=运算符用于按名称传递参数。例如,看下面的代码:

Sub Foo(p1 As integer, p2 As String)
  .. 
End Sub

Sub Test()
  Foo(p2:="foo",p1:=42)
End Sub

如果您严格看待此处涉及的类型,我已经以错误的顺序传递了值。但是因为我使用了 := 按名称绑定参数,编译器将正确地传递这些值。

= 操作符在 VB.Net 中取决于上下文。它既可以是赋值运算符,也可以是比较运算符。例如:

Dim x = 42 ' Assignment
if x = 36 Then 
 'Comparison above
End if

3
等号被用于赋值也用作比较运算符。赋值的一个例子是:
  a = 5

比较的一个例子是:
  if (a = 5) then
    ' do something here
  end if

:=符号专门用于按名称为函数设置特定参数的值。例如:

Sub studentInfo(ByVal name As String, _
       Optional ByVal age As Short = 0, _
       Optional ByVal birth As Date = #1/1/2000#)

  Debug.WriteLine("Name = " & name & _
                "; age = " & CStr(age) & _
                "; birth date = " & CStr(birth))
End Sub

通常情况下,您可以像这样调用函数:

Call studentInfo("Mary", 19, #9/21/1981#)

但是你也可以这样调用该函数:
Call studentInfo("Mary", birth:=#9/21/1981#)

2

= 是一个比较运算符和集合运算符,但 := 只是一个集合运算符。

比较运算: If 7 = 7 Then ...

集合运算: Dim myInt As Integer = 7

假设你有一个名为 SuperList 的自定义对象,它的构造函数需要一个名为 initialCount 的变量,那么你可以这样做:

Dim myList As New SuperList(initialCount:=10)

有时候,当你知道要设置哪些值时,阅读构造函数会更容易,特别是如果你有一个像SomeConstructor(12, 432, True, False, 32)这样的构造函数。

如果看到SomeConstructor(monthsInYear:=12, daysInYear:=432, leapYears:True, leapDays:=False, daysInMonth:=32)会更有意义。

可能还有其他内容,但这是我能想到的。


1
但在 VB.NET 中,“=”既是一个赋值运算符,也是一个比较运算符。 - Jason Irwin
更好的表述是“:= 是用于设置子程序和函数参数值的运算符”,但这不是我的答案 :) 我撤回了我的反对票。 - Binary Worrier
谢谢Binary,我觉得我更关注它的使用而不是定义——从现在开始我会更加小心。 - Cᴏʀʏ

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