Член класса, доступный без создания экземпляра класса

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Член класса, доступный без создания экземпляра класса

Сообщение karlex » 13.06.2009 (Сб) 22:02

Как описать член класса так, чтобы он был доступен без создания экземпляра класса?
Последний раз редактировалось karlex 13.06.2009 (Сб) 23:11, всего редактировалось 1 раз.
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

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

Re: Член класса доступный без создания экземпляра класса

Сообщение alibek » 13.06.2009 (Сб) 22:42

Ты сам понял, что сказал?
Lasciate ogni speranza, voi ch'entrate.

Dimen
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 82
Зарегистрирован: 25.05.2009 (Пн) 15:10

Re: Член класса доступный без создания экземпляра класса

Сообщение Dimen » 13.06.2009 (Сб) 22:51

Если честно и правда сложно догадаться о чем идет речь.
Íå óïóñêàéòå øàíñ!

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Член класса доступный без создания экземпляра класса

Сообщение MIT » 13.06.2009 (Сб) 22:57

А вот я понял. И посоветовал бы Shared, вот только .NET в этом разделе недолюбливают.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Член класса доступный без создания экземпляра класса

Сообщение karlex » 13.06.2009 (Сб) 23:04

To alibek
Да я то понял. Возможно с терминологией чего-то напутал.

Возьмем наглядный пример: Screen.Width
Screen -- класс.
Width -- член класса, для обращения к которому не нужно создавать экземпляр класса.

У меня не получается сделать подобное.


To MIT
Спасибо, но меня интересует именно на VB6.
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

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

Re: Член класса доступный без создания экземпляра класса

Сообщение alibek » 13.06.2009 (Сб) 23:09

А с чего ты решил, что экземпляра класса Screen не существует?
Lasciate ogni speranza, voi ch'entrate.

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Член класса доступный без создания экземпляра класса

Сообщение karlex » 13.06.2009 (Сб) 23:17

alibek писал(а):А с чего ты решил, что экземпляра класса Screen не существует?

Действительно... :? Поторопился с выводами.

Т.е. получается такое вообще не возможно?
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

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

Re: Член класса доступный без создания экземпляра класса

Сообщение alibek » 13.06.2009 (Сб) 23:19

karlex писал(а):Т.е. получается такое вообще не возможно?

А как у тебя вообще могла возникнуть мысль, что такое возможно?
Lasciate ogni speranza, voi ch'entrate.

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Член класса доступный без создания экземпляра класса

Сообщение karlex » 13.06.2009 (Сб) 23:24

alibek писал(а):А как у тебя вообще могла возникнуть мысль, что такое возможно?

Взяла да возникла. Что могло помешать ей возникнуть?
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

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

Re: Член класса, доступный без создания экземпляра класса

Сообщение alibek » 13.06.2009 (Сб) 23:26

Наверное, логика.
Это мысль того же уровня, что и "открыть файл, не открывая файла".
Lasciate ogni speranza, voi ch'entrate.

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Член класса, доступный без создания экземпляра класса

Сообщение karlex » 13.06.2009 (Сб) 23:39

Не понимаю твою логику.

"открыть файл, не открывая файла"

Может ты хотел сказать: "считать/записать данные из/в файл(а), не открывая файла"?
Открыть файл -- это абстракция, или я не прав?

К тому же мой вопрос в VB.NET решаем и, если не ошибаюсь, не только в нем.
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Член класса, доступный без создания экземпляра класса

Сообщение iGrok » 14.06.2009 (Вс) 2:21

karlex писал(а):К тому же мой вопрос в VB.NET решаем и, если не ошибаюсь, не только в нем.

На любом языке он не решаем по определению. То, что какой-либо из языков может создавать видимость того, что "вопрос решён", ещё не значит, что он действительно его решает.

Пока экземпляр класса не создан, он не создан. Его не существует, другими словами. И к его методам, свойствам и прочим членам ты обратиться ну совсем никак не можешь.
А если можешь, это всего лишь значит, что кто-то "втихую" создал экземпляр этого класса. И тебе об этом не сказал. Ай-ай-ай, короче. )
label:
cli
jmp label

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Член класса, доступный без создания экземпляра класса

Сообщение karlex » 14.06.2009 (Вс) 8:32

iGrok писал(а):
karlex писал(а):Пока экземпляр класса не создан, он не создан. Его не существует, другими словами. И к его методам, свойствам и прочим членам ты обратиться ну совсем никак не можешь.

Да, это логично.
Но вот у меня такое ощущение, что сам то класс где-то существует. :roll:

Вот у меня есть такое предположение:
При создании экземпляра класса все его члены "остаются на своем месте" и не дублируются, ведь есть где-то в памяти "оригинал" класса.
А вот для переменных, используемых в классе, выделяется память для каждого нового экземпляра.

Это целиком и полностью бред или тут есть доля правды? (Хотелось бы услышать аргументированный ответ, чтобы понять как там все устроено на самом деле)
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Член класса, доступный без создания экземпляра класса

Сообщение karlex » 14.06.2009 (Вс) 10:34

В принципе можно использовать модуль для частичного решения моего вопроса, на классе я зациклился из за объявления свойств (Property), а оказывается и в обычном модуле можно их объявлять. :eye:
Но все таки бывает полезно инкапсулировать какое-то действие именно в классе, т.к. он может по смыслу подходить к классу, и при этом чтобы была возможность обратиться к этому действию без создания экземпляра.
Видимо в VB6 стандартными средствами этого не сделать, а не стандартными нету смысла ибо вместо упрощения получаем усложнение.


Тут было, кажется, что-то не разумное, лучше подумаю как следует, потом напишу.
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

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

Re: Член класса, доступный без создания экземпляра класса

Сообщение Хакер » 14.06.2009 (Вс) 11:04

Доступ к члену происходит через vtable, указатель на которую есть интерфейс, ссылку на который имеешь ты. Не имея ссылку на интерфейс экземпляра какого-то класса, не поимеешь и адреса vtable, а значит не узнаешь адреса членов. Так что в любом случае, хотя бы временно экземпляр создать придётся.

Имея указатель, скажем, на метод, его уже можно вызывать вручную (пример такого вызова см. в исходниках FNDLL-1), и если подсовывать в качестве первого параметра 0, то получится, что мы вызываем член класса как бы в отрыве от экземпляра. Но нет совершенно никаких гарантий, что не вылезет никаких побочных эффектов (вплоть до краха), кроме как ожидаемого нами от ситуации Me Is Nothing внутри членов.

Так что, да, никакого упрощения.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Член класса, доступный без создания экземпляра класса

Сообщение karlex » 14.06.2009 (Вс) 13:13

Хакер писал(а):Доступ к члену происходит через vtable, указатель на которую есть интерфейс, ссылку на который имеешь ты. Не имея ссылку на интерфейс экземпляра какого-то класса, не поимеешь и адреса vtable, а значит не узнаешь адреса членов. Так что в любом случае, хотя бы временно экземпляр создать придётся.

Ага, я именно так и думал.

Хакер писал(а):Имея указатель, скажем, на метод, его уже можно вызывать вручную (пример такого вызова см. в исходниках FNDLL-1), и если подсовывать в качестве первого параметра 0, то получится, что мы вызываем член класса как бы в отрыве от экземпляра. Но нет совершенно никаких гарантий, что не вылезет никаких побочных эффектов (вплоть до краха), кроме как ожидаемого нами от ситуации Me Is Nothing внутри членов.

Так что, да, никакого упрощения.

Вот, хоть одно разумное сообщение, благодарю!
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

NashRus
Постоялец
Постоялец
 
Сообщения: 388
Зарегистрирован: 18.03.2006 (Сб) 1:16

Re: Член класса, доступный без создания экземпляра класса

Сообщение NashRus » 14.06.2009 (Вс) 19:07

В проекте ActiveX поставить у класса GlobalMultiUse, что обеспечит требуемое поведение.

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Член класса, доступный без создания экземпляра класса

Сообщение karlex » 14.06.2009 (Вс) 19:47

NashRus писал(а):В проекте ActiveX поставить у класса GlobalMultiUse, что обеспечит требуемое поведение.

Не помогло :roll:
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

NashRus
Постоялец
Постоялец
 
Сообщения: 388
Зарегистрирован: 18.03.2006 (Сб) 1:16

Re: Член класса, доступный без создания экземпляра класса

Сообщение NashRus » 14.06.2009 (Вс) 19:52

Почму не помогло ? Вызывать эту функцию из приложения клиента. Такой "модуль" с функциями получается для их экспорта и доступности извне.

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Член класса, доступный без создания экземпляра класса

Сообщение karlex » 14.06.2009 (Вс) 20:06

NashRus
Я в курсе что там получается.
Ты наверно не понял мой вопрос, внимательно с начала темы почитай.
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

NashRus
Постоялец
Постоялец
 
Сообщения: 388
Зарегистрирован: 18.03.2006 (Сб) 1:16

Re: Член класса, доступный без создания экземпляра класса

Сообщение NashRus » 14.06.2009 (Вс) 20:46

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

А теперь скажи, чему противоречит этот аттач в твоем вопросе, который я целиком здесь цитирую:

Код: Выделить всё
[b]Член класса, доступный без создания экземпляра класса[/b]
Как описать член класса так, чтобы он был доступен без создания экземпляра класса?
Вложения
TestSample.rar
(2.07 Кб) Скачиваний: 52

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

Re: Член класса, доступный без создания экземпляра класса

Сообщение Хакер » 14.06.2009 (Вс) 20:54

А теперь скажи, чему противоречит этот аттач

Тем, что экземпляр создаётся.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

NashRus
Постоялец
Постоялец
 
Сообщения: 388
Зарегистрирован: 18.03.2006 (Сб) 1:16

Re: Член класса, доступный без создания экземпляра класса

Сообщение NashRus » 14.06.2009 (Вс) 21:00

Хакер писал(а):
А теперь скажи, чему противоречит этот аттач

Тем, что экземпляр создаётся.


Ежу понятно, что по-любому создается.
Наверное, можно как-то менее придираться. Тем более не я так вопрос сформулировал.

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

Re: Член класса, доступный без создания экземпляра класса

Сообщение Хакер » 14.06.2009 (Вс) 21:09

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

NashRus
Постоялец
Постоялец
 
Сообщения: 388
Зарегистрирован: 18.03.2006 (Сб) 1:16

Re: Член класса, доступный без создания экземпляра класса

Сообщение NashRus » 14.06.2009 (Вс) 21:23

Только из уважения отвечу.
Я пасс. Кто хочет понять, тот поймет, а нет - так нет.

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Член класса, доступный без создания экземпляра класса

Сообщение karlex » 14.06.2009 (Вс) 21:52

NashRus
Ну ты даешь :D
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.

trash
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 113
Зарегистрирован: 28.01.2009 (Ср) 12:09

Re: Член класса доступный без создания экземпляра класса

Сообщение trash » 15.06.2009 (Пн) 9:32

karlex писал(а):
alibek писал(а):А как у тебя вообще могла возникнуть мысль, что такое возможно?

Взяла да возникла. Что могло помешать ей возникнуть?

RTFM :) (люблю философские вопросы ))
NashRus
Ну ты даешь
ЧСВ детектед. Попасть пальцем в небо, а потом сказать, что туда и целилися — типичный прием демагога. Вопрос "зачем?" как правило остается без ответа. Рекомендуется жесткая критика в лошадиных дозах.

karlex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 138
Зарегистрирован: 30.03.2009 (Пн) 20:25
Откуда: Пермский край, г.Кунгур

Re: Член класса доступный без создания экземпляра класса

Сообщение karlex » 15.06.2009 (Пн) 14:22

trash писал(а):RTFM

Каким образом?
Уже вроде обсудили, что проблему можно решить, но не стандартными средствами -- это плохо конечно, но так или иначе она решаема.
Минус в том, что VB6 по умолчанию не предоставляет средств.
Все гениальное — просто!
-------------------------------------
Кто ищет — тот всегда найдет!
-------------------------------------
Лень — двигатель прогресса.
Прогресс — двигатель лени.


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

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 61

    TopList