Зоны видимости переменных

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

Зоны видимости переменных

Сообщение Киска » 25.11.2006 (Сб) 19:19

Скажите пожалуйста, с Private и Public зона видимости переменных понятна, а оператор Dim какую зону видимости задаёт?

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 25.11.2006 (Сб) 19:21

Private
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

_ae_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 165
Зарегистрирован: 08.10.2006 (Вс) 14:37

Сообщение _ae_ » 25.11.2006 (Сб) 19:35

Dim=Private

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 25.11.2006 (Сб) 20:03

_ae_
Ничего подобного. Попробуй сделать Private в функции.
Изображение

VB-constructor
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 160
Зарегистрирован: 24.07.2006 (Пн) 21:37
Откуда: Ростов-на-Дону

Сообщение VB-constructor » 25.11.2006 (Сб) 20:36

Попробуй сделать Private в функции.
Попробовал, а что? Все так же как с dim. В чем разница?
Человек рождён для того, чтобы достичь жизни...

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 25.11.2006 (Сб) 20:43

Странно. По идее Private - данные, видимые в модуле. Public - можно видеть из других модулей, Global - глобальна для всех процессов этого exe (была в Win16), а Dim - по идее должен быть на уровне процедуры.
Изображение

_ae_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 165
Зарегистрирован: 08.10.2006 (Вс) 14:37

Сообщение _ae_ » 25.11.2006 (Сб) 20:45

keks-n
Global=Public
Dim=Private
Откуда у вас эти идеи?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 25.11.2006 (Сб) 20:48


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

Сообщение alibek » 25.11.2006 (Сб) 20:51

Public = Global. Global это устаревший синтаксис, который по прежнему поддерживается.
Private = Dim по области видимости. Различия синтаксические, внутри процедур переменные нельзя объявлять с помощью Private.
Lasciate ogni speranza, voi ch'entrate.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 25.11.2006 (Сб) 21:00

внутри процедур переменные нельзя объявлять с помощью Private.

VB-constructor писал(а):
Попробуй сделать Private в функции.
Попробовал, а что? Все так же как с dim. В чем разница?

Гм. Здаётся мне, что кто-то кого-то пытался обмануть :roll:
Изображение

Киска
Новичок
Новичок
Аватара пользователя
 
Сообщения: 39
Зарегистрирован: 23.11.2006 (Чт) 1:43

Сообщение Киска » 25.11.2006 (Сб) 21:13

Зачем же тогда нужен Private, когда с помощью Dim можно объявить переменную как Private?

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Сообщение Debugger » 25.11.2006 (Сб) 21:59

Private Sub
!!! НЕ !!!
Dim Sub

Но

Dim i = Private i

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 25.11.2006 (Сб) 22:02

Киска
Условности. Private с Public прикрутили, когда появилось ООП
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.11.2006 (Вс) 9:32

keks-n писал(а):Global - глобальна для всех процессов этого exe (была в Win16)

Интересно построенная фраза. В сочетании с тем, что в Win16 процессов (даже слова такого) не было.
Изображение

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 27.11.2006 (Пн) 10:45

keks-n писал(а): Global - глобальна для всех процессов этого exe (была в Win16),


это что-то новое, многопоточность еще куда не шло, а вот многопроцессность... да еще и в win16...
Весь мир матрица, а мы в нем потоки байтов!

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

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

Киска

Есть 3 основных уровня зон видимости
1) Процедурный.
2) Модульный.
3) Глобальный.

Dim служит только для объявления переменных. Зона видимости переменной зависет от того, в каком месте объявили переменную: если в процедуре - то 1, если за пределами процедуры (ь.е. в модуле) - то 2.

Private служит для объявления всего чего можно (переменных, процедур, энумов, типов, констант, Declare-функций и тд.) , для уровня 2.
Все объявляемые этим ключевым словом "объекты" будут иметь уровень 2

Public - то же самое что и Private, вот только уровень объявляемого будет уже не 2, а 3. На Public действуют некоторые ограничения. Например нельзя объявлять Public Declare- фукнции, Public User-Defined-типы и тд. в теле классов.

Global - устарело. Используется в настоящее время только (имхо) с переменными. При поптыке использовать с чем-либо другим, VB IDE автоматически убирает Global.

есть ещё Friend но это уже отдельная тема.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 27.11.2006 (Пн) 11:22

Хакер писал(а):Например нельзя объявлять ... Public User-Defined-типы и тд. в теле классов.


Правда?
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

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

Сообщение Хакер » 27.11.2006 (Пн) 11:32

Правда.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

_ae_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 165
Зарегистрирован: 08.10.2006 (Вс) 14:37

Сообщение _ae_ » 27.11.2006 (Пн) 11:43

Можно.
Например в Dll проекте.

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

Сообщение Хакер » 27.11.2006 (Пн) 12:06

Ещё один.

Во первых не DLL проект, а AcitveX COM библиотека.

А во вторых, тебя не смущает что даже в тексте ошибки ничего не говорится об этом и даже в текстах МСДН.

Изображение

А в третих, какой смысл говорить это Киске, если она всё равно не знает что это такое.

Ладно, будем считать что это мой недочёт и я забыл зделать примечание по поводу ActiveX DLL.

Все довольны? :x
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.11.2006 (Пн) 12:53

Хакер, и всё равно не путай сообщения об ошибках.
То, что ты привёл, вылазит на попытку объявить публичную константу. А на объявление публичного UDF выходит "Cannot define a Public user-defined type within a private object module", откуда вполне следует, что в не-private object modules объявить можно.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


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

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

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

    TopList