在 VB.NET 中 Is 是用于测试类型相等性的语言运算符。请注意,Type.Equals 测试两个相同类型的变量是否指向同一个对象。如下例所示。
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim X As New TestObject
Dim Y As New TestObject
If X Is Y Then MsgBox("The Same 1")
If Type.Equals(X, Y) Then MsgBox("The Same 2")
X = Y
If X Is Y Then MsgBox("The Same 3")
If Type.Equals(X, Y) Then MsgBox("The Same 4")
End Sub
End Class
Public Class TestObject
Public Value As Double
End Class
这样做是因为 BASIC 语言中“等于”运算符的历史。当在 VB4 中引入对象时,选择 IS 来测试相等性,因为感觉重载 equals 会产生问题。
我建议在 google 和 usenet 中搜索 Paul Vicks 关于为什么移植了一些单独的 BASIC 习语以及为什么没有移植其他习语的评论。我相信在这种情况下是为了避免混淆,因为 VB.NET 引入
ObjectA = ObjectC '这会导致 ObjectA 引用与 ObjectC 引用的对象相同的对象。
而在 VB6 中它是 Set ObjectA = ObjectC
与在 VB4 中引入对象时 IS 和 Set 用于处理对象而不是重载 equals 的原因相同。
最终,这些怪癖成为了基本编码方式的一部分。