foo - указатель на ячейку памяти, и ничто не означает «не указывать ни на какую память, потому что память еще не выделена».Равно означает, что при сравнении двух типов значений они имеют одинаковое значение.Но вы предполагаете, что foo представляет объект, который всегда является ссылочным типом, который должен указывать на объект в памяти.«is» предназначен для сравнения типов объектов и возвращает «true», только если два объекта указывают на одно и то же значение.
Скажем, у вас есть clsFoo с одной общедоступной целочисленной переменной-членом 'x', а foo1 и foo2 оба являются clsFoo, а y и z являются целыми числами
foo1=new clsFoo
foo2=new clsFoo
foo1.x=1
foo2.x=1
y=2
z=1
dim b as boolean
b= foo1 is not foo2 ' b is true
b= foo1.x=foo2.x ' b is tree
b= foo1 is foo2 'b is false
b= foo1.x=z ' true of course
foo2.x=3
b= foo1.x=foo2.x ' false of course
foo1=foo2
b=foo1 is foo2 ' now it's true
b= foo1.x=foo2.x ' true again
b= 3=3 ' just as this would be
b= foo1=foo2 ' ERROR: Option Strict On disallows operands of type Object for operator '='. Use the 'Is' operator to test for object identity.
НИКОГДА забудьтевключить опцию строго.Чтобы потерпеть неудачу, это кричит «ПОЖАЛУЙСТА, заставь мою программу сосать».