В 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 комментарии Пола Викса о том, почему некоторые отдельные базовые идиомы были перенесены, а другие - нет. Я считаю, что в этом случае нужно было избегать путаницы, поскольку VB.NET представил
ObjectA = ObjectC ', который заставляет ObjectA ссылаться на те же объекты, на которые ссылается ObjectC.
В то время как в VB6 было установлено ObjectA = ObjectC
По той же причине, по которой объекты были введены в VB4 IS и Set, использовались для работы с объектами вместо перегрузки равных.
В конечном итоге эти причуды стали частью Базового Пути кодирования.