powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема доступа к Default Property в VB6sp6
4 сообщений из 4, страница 1 из 1
Проблема доступа к Default Property в VB6sp6
    #34359791
uncle_gm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пусть имеется класс (например, ArrayClass), полем которого является массив:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private mArr( 24 ,  24 ) As Boolean

Public Property Get Arr(x As Byte, y As Byte) As Variant
Arr = mArr(x, y)
End Property

Public Property Let Arr(x As Byte, y As Byte, ByVal vNewValue As Variant)
Let mArr(x, y) = vNewValue
End Property

Причем, свойство Arr - Default Property

Тогда код,типа :

Код: plaintext
1.
2.
3.
4.
5.
6.
Dim tmp As New ArrayClass

tmp( 0 ,  0 ) = True
tmp( 1 ,  1 ) = True

Debug.Print "tmp(0, 0) =" & tmp( 0 ,  0 )
Debug.Print "tmp(1, 1) =" & tmp( 1 ,  1 )

работает без проблем. Т.е. без проблем производится присвоение и чтение элементов массива посредством Default Property - Arr.

Если же мы включаем ArrayClass в качестве поля данных в другой класс, например(ContClass):

Код: plaintext
Public mArrayClass As New ArrayClass

то попытка присвоения, типа:

Код: plaintext
1.
2.
Dim tmp As New ContClass

tmp.mArrayClass( 0 ,  0 ) = True 

вызывает ошибку времени во время исполнения "Wrong number of arguments or invalid property assignment".

Хотя чтение происходит без проблем:

Код: plaintext
debug.print "tmp.mArrayClass(0, 0)=" & tmp.mArrayClass( 0 ,  0 )

Проблема решается путем явного указания свойства:

Код: plaintext
tmp.mArrayClass.Arr( 0 ,  0 ) = True


Но код при этом теряет свою читабельность.

Это особенно заметно при большем уровне вложенности классов.

Кто-нибудь может подсказать способ решения данной проблемы?
...
Рейтинг: 0 / 0
Проблема доступа к Default Property в VB6sp6
    #34359843
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
private m_ArrayClass As ArrayClass

public property get ArrayClass As ArrayClass
   set ArrayClass = m_ArrayClass
end property
Private Sub Class_Initialize()
   Set m_ArrayClass = New ArrayClass
End Sub
И никаких проблем не возникает:
Код: plaintext
1.
2.
3.
4.
   Dim Obj As CountClass
   Set Obj = New CountClass
   Obj.ArrayClass( 0 ,  0 ) = True
   Debug.Print Obj.ArrayClass( 0 ,  0 )
Больше того, назначаю свойством по-умолчанию свойство ArrayClass, и можно так обращаться
Код: plaintext
1.
   Obj( 1 ,  1 ) = True
   Debug.Print Obj( 1 ,  1 )
...
Рейтинг: 0 / 0
Проблема доступа к Default Property в VB6sp6
    #34360707
FAndrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uncle_gmНо код при этом теряет свою читабельность.
Особено, потом будет весело переводить программу на .Net. Не любит он свойства по умолчанию.
Да и насчет читабельности можно подискутировать. Например,
Код: plaintext
Obj( 1 ,  1 ) = True
мало о чем говорит. Первая реакция это, то что мы работаем с массивом. И, вообще, нужно стараться писать так, что бы тебя понял другой человек, а не компьютер.
...
Рейтинг: 0 / 0
Проблема доступа к Default Property в VB6sp6
    #34365122
uncle_gm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, действительно, если пользоваться свойствами во включаюжщем классе, то все работает нормально.

Спасибо за совет.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблема доступа к Default Property в VB6sp6
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]