Dim aClass As New A
Dim bClass As New B
aClass.ValueA = "AClass"
bClass.ValueA = "BClass"
bClass.ValueB = "BClass"
Хорошо, теперь у вас есть два экземпляра, выделенных в куче, и две переменные, которые на них ссылаются.Примерно так:
Variable Instances on the heap
-------- ---------------------
aClass ------> Instance of class A
bClass ------> Instance of class B
(Кстати, ваше именование сбивает с толку. AClass и bClass вовсе не являются классами; это переменные, которые ссылаются на instance .)
Затем вы делаете это:
Dim baseBClass As A
baseBClass = CType(bClass, A)
Итак, теперь у вас есть три переменные, но те же два экземпляра, что и раньше.Две переменные (bClass и baseBClass) обе ссылаются на один и тот же экземпляр:
Variable Instances on the heap
-------- ---------------------
aClass ---------> Instance of class A
baseBClass -\
>--> Instance of class B
bClass -----/
Переменная baseBClass имеет тип, отличный от переменной bClass, но обе они ссылаются на один и тот же экземпляр.
Теперь вы делаете это:
baseBClass = aClass
, который заменяет ссылку в переменной baseBClass на другую ссылку, в частности, ссылку на объект, помеченный как «экземпляр класса A» выше:
Variable Instances on the heap
-------- ---------------------
aClass -----\
>--> Instance of class A
baseBClass -/
bClass ---------> Instance of class B
Вы просто назначаете ссылки вокруг.На самом деле вы никогда не копируете какие-либо данные.
Но из того, что я собрал в вашем описании, вы ожидаете, что некоторые из этих назначений будут копировать ссылки из одной переменной в другую, а другие - копировать содержимое объектов из одного экземплярадругой?Вы используете один и тот же оператор присваивания для обозначения обеих вещей.Как вы ожидаете, что компилятор узнает, что есть что?