Ключ в том, что car
является ссылочным типом , а не типом значения. Два создаваемых вами автомобильных объекта - совершенно разные вещи. Каждый из них указывает на другое место в памяти, даже если они имеют одинаковые свойства. Думайте о них как об идентичных близнецах. Один садится в грузовик. Если вы спросите, есть ли в грузовике другой , ответ будет отрицательным, хотя в некотором смысле они точно такие же .
Если бы вы определили car2
и затем установили его равным car1 (Dim car2 As New Car = car1
), то вам пришлось бы указывать на точно такое же место в памяти. Ваш результат был бы правдой. Обе переменные ссылались бы на один и тот же объект автомобиля.
Теперь, если бы это был тип значения , например, целое число или дата (или структура. И строка ведет себя так же.), То любые одинаковые значения будут считаться одинаковыми. Вы кладете 10 долларов в машину, и я спрашиваю, есть ли 10 долларов в машине. Ответ - да, и не важно, были ли это мои 10 долларов или ваши 10 долларов.
Ваш пример является отличным примером ключевой разницы в поведении ссылочных типов и типов значений.
Для ссылочных типов по умолчанию свойство Equals проверяет, являются ли два объекта ссылками на одно и то же место в памяти, а не одинаковыми ли все значения. ( Содержит использует свойство Равно .) Вы можете переопределить это поведение для определенных объектов, если хотите.