Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инициализация класса с параметрами, Возможно ли? 
V
    Опции темы
ИгнатьевАлексей
Дата 19.6.2009, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: 2
Всего: 3



А вот еще одна непонятка, дорогие коллеги!

При создании экземпляра класса ой как хочется передать параметры в процедуру инициализации класса! Если я правильно понял, то в отличии от C++, например, в VB это невозможно. :(   Или я ошибаюсь?

Я выхожу из положения, как мне кажется, не очень удобно и красиво. Создаю дополнительную процедуру. которая уже может принимать параметры и запускаю ее сразу после создания экземпляра.

Вопрос - как лучше и правильнее поступать?  smile 

Спасибо!


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
Akina
Дата 19.6.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Можно поподробнее? а ещё лучше - с примером кода (неработающего из-за указанной выше невозможности, но показывающего суть)...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ИгнатьевАлексей
Дата 19.6.2009, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: 2
Всего: 3



Akina,  попробую.
 Модуль класса Class1
Код

Option Explicit

Private baseLineRange As Range


Private Sub Class_Initialize()
  
  'а тут пусто :(
  
End Sub


Public Sub AddInitialize(ByRef classBaseRange As Range)
        ' дополнительные действия по инициализации
         
        Set baseLineRange = classBaseRange 'установим стартовую ячейку линии
    
End Sub


Модуль основной программы
Код

 Sub test777()
    
    Dim baseRange As Range
    Dim testSubst As Class1
    
    Set baseRange = Range("A1")
    
    Set testSubst = New Class1
    
    testSubst.AddInitialize baseRange
    
End Sub


А как бы хотелось:

Модуль класса Class1
Код

Option Explicit

Private baseLineRange As Range


Private Sub Class_Initialize(ByRef classBaseRange As Range)
  
  Set baseLineRange = classBaseRange 'установим стартовую ячейку линии
  
End Sub



Модуль основной программы
Код

 Sub test777()
    
    Dim baseRange As Range
    Dim testSubst As Class1
    
    Set baseRange = Range("A1")
    
    Set testSubst = New Class1 baseRange
    
    
End Sub


Но не получается...


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
Akina
Дата 19.6.2009, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Ааа... нет, тут тебе не вывернуться. 
Обрати внимание - процедура Class_Initialize не зря сделана приватной. Так уж тут построены классы. Оператор New даёт тебе новый, "с иголочки", без каких-либо признаков индивидуальности, класс. А потом уже делай с ним что тебе заблагорассудится.

Добавлено через 52 секунды
Конечно, можно заставить процедуру инициализации дотянуться до како-нить глобальной переменной - но это ещё более кривое решение.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ИгнатьевАлексей
Дата 19.6.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: 2
Всего: 3



Нет! Глобальные переменные - не наш метод!  smile 
Спасибо, Akina! 


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.1865 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.