Как создать свойство в свойстве?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Как создать свойство в свойстве?

Сообщение Don Leno » 05.06.2015 (Пт) 10:49

В класс модуле можно создать свойство и оно будет выглядеть так:
Код: Выделить всё
    object.property=1

Вопрос как сделать чтобы было так:
Код: Выделить всё
   object.prop.my=1
   object.prop.you=2

то есть в одном свойстве есть еще подмножество.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Как создать свойство в свойстве?

Сообщение alibek » 05.06.2015 (Пт) 10:55

Создаешь класс PropList со свойствами my as long и you as long.
Затем создаешь класс MyObject со свойством prop as PropList.
Lasciate ogni speranza, voi ch'entrate.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Как создать свойство в свойстве?

Сообщение Don Leno » 05.06.2015 (Пт) 10:58

alibek, если можно строчками кода. Недопонимаю как сделать "prop as PropList"

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как создать свойство в свойстве?

Сообщение Хакер » 05.06.2015 (Пт) 10:59

Код: Выделить всё
Public prop As PropList
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Как создать свойство в свойстве?

Сообщение Don Leno » 05.06.2015 (Пт) 11:00

СПС!!!!!!!

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Как создать свойство в свойстве?

Сообщение Don Leno » 05.06.2015 (Пт) 11:03

))) После спс не я писал ))) Но верно - затупил)))

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как создать свойство в свойстве?

Сообщение Хакер » 05.06.2015 (Пт) 11:05

Don Leno писал(а):))) После спс не я писал )))

Писал-писал.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Как создать свойство в свойстве?

Сообщение Don Leno » 05.06.2015 (Пт) 11:12

спорить бесполезно=)

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Как создать свойство в свойстве?

Сообщение Don Leno » 05.06.2015 (Пт) 11:14

возможно ли такой метод сделать в одном классе? И как?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как создать свойство в свойстве?

Сообщение Хакер » 05.06.2015 (Пт) 11:15

Don Leno писал(а):возможно ли такой метод сделать в одном классе? И как?

Какой метод?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Как создать свойство в свойстве?

Сообщение Don Leno » 05.06.2015 (Пт) 11:17

свойство в свойстве только в одном классе?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как создать свойство в свойстве?

Сообщение Хакер » 05.06.2015 (Пт) 11:18

Don Leno писал(а):свойство в свойстве только в одном классе?

Свойство не бывает в свойстве. Свойство бывает у интерфейса объекта.
Интерфейсов у объекта может быть много. Дальше думай.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Как создать свойство в свойстве?

Сообщение Don Leno » 05.06.2015 (Пт) 11:19

Тогда как создать еще интерфейс?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как создать свойство в свойстве?

Сообщение Хакер » 05.06.2015 (Пт) 11:20

Don Leno писал(а):Тогда как создать еще интерфейс?

Объявить (или использовать существующий, если есть подходящий).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Как создать свойство в свойстве?

Сообщение Don Leno » 05.06.2015 (Пт) 11:21

Стоп! Что такое интерфейс объекта и как его объявить?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как создать свойство в свойстве?

Сообщение Хакер » 05.06.2015 (Пт) 11:39

Don Leno писал(а):Что такое интерфейс объекта

Интерфейс — это зафиксированный набор публично доступных членов объекта (методов и свойств).
Интерфейсы могут наследоваться.

Почитай вот это: viewtopic.php?f=92&t=43751&p=6760534#p6760534
Поищи по форуму по фразе «com-интерфейс».

Только всё равно ты пытаешься сделать малополезное дело. Хоть и осуществимое.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Как создать свойство в свойстве?

Сообщение Don Leno » 05.06.2015 (Пт) 11:47

спасибо за подробный ответ. Буду изучать))

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как создать свойство в свойстве?

Сообщение Хакер » 05.06.2015 (Пт) 12:43

Хакер писал(а):и как его объявить?

На языка IDL с компиляцией в TLB.
Либо на VB, объявив класс с пустыми методами.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Как создать свойство в свойстве?

Сообщение Mikle » 05.06.2015 (Пт) 16:08

А может достаточно будет Type вместо класса?

Jack Ferre
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 17.02.2014 (Пн) 14:31
Откуда: Казахстан, Костанай

Re: Как создать свойство в свойстве?

Сообщение Jack Ferre » 05.06.2015 (Пт) 17:23

Интерфейс IProp:
Код: Выделить всё
Option Explicit

Public Property Get Secondary() As Long: End Property
Public Property Let Secondary(ByVal Value As Long): End Property


Класс CTest:
Код: Выделить всё
Option Explicit

Implements IProp

Dim m_primary_secondary As Long



Public Property Get Primary() As IProp
    Set Primary = Me
End Property

Private Property Get IProp_Secondary() As Long
    IProp_Secondary = m_primary_secondary
End Property

Private Property Let IProp_Secondary(ByVal Value As Long)
    m_primary_secondary = Value
End Property


Тест:
Код: Выделить всё
    Dim test As New CTest
   
    test.Primary.Secondary = 123
    Debug.Print test.Primary.Secondary

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как создать свойство в свойстве?

Сообщение Хакер » 05.06.2015 (Пт) 20:16

Mikle писал(а):А может достаточно будет Type вместо класса?

Будет большой сюрприз при передачи свойств ByRef.



Jack Ferre ,
Твой код плох тем, что создаёт утечку памяти: экземпляры CTest никогда не уничтожаются в нужный момент.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Jack Ferre
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 17.02.2014 (Пн) 14:31
Откуда: Казахстан, Костанай

Re: Как создать свойство в свойстве?

Сообщение Jack Ferre » 05.06.2015 (Пт) 20:54

Хакер,
Можно подробнее.

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Как создать свойство в свойстве?

Сообщение Sam777e » 05.06.2015 (Пт) 22:45

Предполагаю, что грех здесь

Dim test As New CTest

, а правильно так
Код: Выделить всё
Dim test As CTest
Set test = New  CTest
. . .
Set test = Nothing
Здоровья и удачи

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как создать свойство в свойстве?

Сообщение Хакер » 06.06.2015 (Сб) 2:30

Это вообще ничего не измеит. Засуньте брекоинт или Debug.Print в Class_Uninitialize. Оно никогда не выполнится.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Jack Ferre
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 17.02.2014 (Пн) 14:31
Откуда: Казахстан, Костанай

Re: Как создать свойство в свойстве?

Сообщение Jack Ferre » 06.06.2015 (Сб) 12:44

Хакер,
Так что на счёт утечки памяти?
Хакер писал(а):экземпляры CTest никогда не уничтожаются в нужный момент

Только если создать ссылку на test.Primary. Но это же не утечка памяти - программист сам её создает.

А в примере после Debug.Print test.Primary.Secondary test и test.Primary освобождаются одновременно.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как создать свойство в свойстве?

Сообщение Хакер » 06.06.2015 (Сб) 12:51

Jack Ferre писал(а):Только если создать ссылку на test.Primary. Но это же не утечка памяти - программист сам её создает.

А утечка памяти это только то, что создаётся не руками программиста, а шалостью демонов? Её программист и создаёт.

Извиняюсь, но дело в том, что я невнимательно смотрел на код и подумал, что там
Код: Выделить всё
Public Primary As IProp

Private sub Class_Initialize()
    Set Primary = Me
End Sub


В этом случае получался бы неубиваемый экземпляр (неубиваемый в рамках обычной концепции подсчёта ссылок). А с get-хендлером свойства — всё окей.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Jack Ferre
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 132
Зарегистрирован: 17.02.2014 (Пн) 14:31
Откуда: Казахстан, Костанай

Re: Как создать свойство в свойстве?

Сообщение Jack Ferre » 06.06.2015 (Сб) 13:02

Так как до этого я свойство в свойстве не писал - пришлось изобретать.

И именно так
Хакер писал(а):Public Primary As IProp

Private sub Class_Initialize()
    Set Primary = Me
End Sub

и было сначала написано :) и объект становился бессмертным


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 55

    TopList