Это должно добавить к ответу Дабблернла.
Короче говоря, VB6 никогда не имел общего ссылочного типа.Будучи построенным на COM, единственный ссылочный тип (Dim ... As Object) - это тип для классов на основе COM (или в стиле COM).Тип Variant был хорош только для бокса других типов.
Что касается того, почему ByRef работает с массивами ...
Эволюция многих диалектов BASIC, включая VB6, приняла / адаптировала парадигмуФортран, когда дело доходит до подпрограмм и функций;а именно, параметры передаются по адресу (следовательно, ByRef является значением по умолчанию), а функции возвращают свои результаты по значению.Добавьте к этому, что BASIC никогда не имел понятия адреса или ссылки: VB6 (и более ранние версии) имитировал адреса с 32-разрядными (подписанными) целыми числами и в противном случае (странным образом) справлялся бы с помощью особых правил DECLARE SUB./ FUNCTION оператор и (операторский башмак) оператор AddressOf и функции VarPtr / StrPtr.
Заключительное примечание: Поскольку классы VB6 выполнены в стиле COM, в VB6 есть оператор SET.Причина этого заключается в том, что без SET ситуация l-значение = r-значение является подразумеваемым оператором LET.COM поддерживает понятие свойства по умолчанию (с параметрами и без параметров);LET objA = objB
интерпретируется как LET objA.DefaultPropOfA = objB.DefaultPropOfB
.SET, с другой стороны, заставляет objA ссылаться на тот же объект, на который ссылается objB.
Visual Basic .NET - хороший и мощный язык, с гораздо меньшими недостатками и недостатками, чем VB6.Тем не менее, он имеет большие отличия от своего двоюродного брата.Эти различия заставляли пользователей VB6 долгое время ворчать, и я подозреваю, что многие пользователи VB.NET были сбиты с толку, когда их просили разобраться с кодом VB6.
Кстати, кодировщик VB6 будет работать с массивом внутрипроблема класса следующим образом:
Public Property Get DaysOfWeek(ByVal index As Integer) As String
DaysOfWeek = m_strDaysOfWeek(index)
End Property
Public Property Let DaysOfWeek(ByVal index As Integer, ByRef value As String)
m_strDaysOfWeek(index) = value
End Property
Это позволило бы синтаксису strDay = clsDateTime.DaysOfWeek(1)
и clsDateTime.DaysOfWeek(2)="Tuesday"
работать так, как нужно.