Господа, не отвлекайтесь от темы
На самом деле я что-то не до конца понимаю. Судя по документации, Set Object = ... присваивает указатель, а не производит копирование содержимого экземпляра класса.
Чтобы было понятнее, напишу пару кусков кода:
MyClass1 class module:
option explicit
private m_iLength as integer
private m_iWidth as integer
public property get Length() as integet
Length = m_iLength
end property
public property let Length(a_iNew as integer)
m_iLength = a_iNew
end property
public property get Width() as integer
Width = m_iWidth
end property
public property let Width(a_iNew as integer)
m_Width = a_iNew
end property
Далее использование класса:
dim Person1 as MyClass1
dim Person2 as MyClass1
set Person1 = new MyClass1
set Person2 = new MyClass1
Person1.Length = 20
Person1.Width = 10
Person2 = Person1
Так вот, я хочу, чтобы в результате выполнения последней строчки экземпляру Person2 класса MyClass1 было присвоено содержимое экземпляра Person1 этого же класса. Причем очевидно, что способ присвоения должен регламентироваться в самОм классе MyClass1, потому что простое копирование куска памяти, соответствующей экземпляру, не всегда будет корректным. Т.е. фактически я хочу, чтобы для Person1 выполнился подобный метод (в простейшем случае):
sub Copy(a_New as MyClass1)
Length = a_New.Length
Width = a_New.Width
end sub
Или в более сложном случае (если присваиваем экземпляр
другого класса):
sub Copy(a_New as
MyClass2)
Length = ....
Width = ....
end sub
А при Set Person1 = Person2, я так понимаю, у меня просто будет еще один указатель на Person1, и экземпляр Person2 будет уничтожен? Или Set Person2 = Person1 выполняет копирование содержимого памяти? Но тогда это некорректно, если класс содержит еще какие-нибудь хитрые указатели.
В C++ такой метод класса называется operator:=, и он позволяет определять механизмы присвоения экземпляров данного класса или других классов. Есть в VB что-то подобное?