Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/40: Рейтинг темы: голосов - 40, средняя оценка - 4.95
 Аватар для PowerCat
0 / 2 / 1
Регистрация: 19.09.2013
Сообщений: 464

Поясните суть LET и GET для пользовательских классов

30.09.2015, 08:38. Показов 8274. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет.
Появилась первый раз необходимость написать собственный класс. До этого ни разу это не делал на VB.
Может кто-нить ПОНЯТНО объяснить эти LET и GET...а то найденые примеры мелкомягких как обычно ничего не объясняют, а только путают...Можно объяснить это на примитивнейших примерах? Без инициализаций окон и получений имен файлов? И если при этом исползуются слова "эта функция GET используется для получения", то пояснить, кто получатель - программа-класс или пользователь (код, где используется класс).

Фу, вроде все проблемы описал )) Обобщу - прошу понятное объяснение LET и GET.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.09.2015, 08:38
Ответы с готовыми решениями:

IDisposable для пользовательских классов. Разобрать пример кода
Есть некий объект, одно поле которого - это класс-наследник IDisposable. Соответственно, данный класс тоже должен быть наследником...

Поясните слегка суть задачи
Пользователь программы выбирает тему и определяет количество заданий (вводит с клавиатуры). Компьютер генерирует случайным образом...

Ввод текста, поясните суть EOF
Задача: ввести несколько строк текста Ввод соответственно идёт через char cc; while ((cc=getchar())!=EOF) Так вот, как...

31
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38197 / 21130 / 4309
Регистрация: 12.02.2012
Сообщений: 34,737
Записей в блоге: 14
30.09.2015, 09:10
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Не понимаю, что за претензии к Microsoft-у... Фирменные объяснения вполне внятны.

Но попробую что-то сказать от себя.

При создании класса можно просто "не заморачиваться" и объявить поля как public. Доступ к этим полям будет обычным Объект.Имя_Поля=

Но если хочется:

1) Сделать проверку данных при присвлении
2) Создать поле Read-Only или Write-Only

то использование public не поможет. Нужно создавать процедуры GET и LET/SET (последняя - в случае, когда значение поля есть объект). Принцип примерно таков:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private locVar As Integer ' закрытая переменная для хранения значения
 
Public Property Get MyProp() As integer '::: Если Property Get не создавать, MyProp станет Write-Only
        MyProp=locVar
End Property
 
Public Property Let MyProp(z as integer) '::: Если Property Let не создавать, MyProp станет Read-Only
        if (z ...  ' проверки
          locVar=z
        end if
End Property
1
 Аватар для PowerCat
0 / 2 / 1
Регистрация: 19.09.2013
Сообщений: 464
30.09.2015, 09:15  [ТС]
Благодарю за ответ.
А теперь можно ли пояснить - что это вообще такое - LET и GET? Именно это меня интересует...простыми, доступными для нубов словами, типа "LET - используется для...Она делает это так, а это - так..."

Области видимости, проверки - это все не нужно, только понятное описание LET и GET
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38197 / 21130 / 4309
Регистрация: 12.02.2012
Сообщений: 34,737
Записей в блоге: 14
30.09.2015, 09:30
LET и GET - служебные процедуры. Они вызываются неявно. Когда пишешь Obj.MyProp=111 , вызывается Property Let с параметром 111. Когда пишешь x=Obj.MyProp вывзывается Property Get.
0
 Аватар для PowerCat
0 / 2 / 1
Регистрация: 19.09.2013
Сообщений: 464
30.09.2015, 09:36  [ТС]
Еще раз благодарю, что вы пытаетесь помочь. Одно это уже заслуживает уважения. Но, как я писал выше, мне нужно описать, что это...
Представьте, что я ни разу не программировал дальше MsgBox (2*2=4)...Давайте я попробую переформулировать вопросы:
1. Для чего нужна GET;
2. Для чего нужна LET;
3. Пример для GET - в примере построчное описание того, что происходит, как-то: "Функция принимает аргумент вызывающей процедуры и присваивает его тому-то и тому-то. Это позволяет в дальнейшем...."
4. Аналогично для LET 3.

По-детски объяснить. Ибо во всех примерах туда что-то передается, но я не понимаю что и для чего, и что с этим переданным аргументом происходит, и для чего это надо, и как это все использовать, и в каком вообще случае.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38197 / 21130 / 4309
Регистрация: 12.02.2012
Сообщений: 34,737
Записей в блоге: 14
30.09.2015, 09:53
Если Вы не продвинулись дальше MsgBox, то Вам нужно:

1) усвоить что такое процедуры и функции, чем они отличаются друг от друга и для чего используются
2) что такое объекты

а уже потом вернуться к Get/Let, если в этом будет необходимость.

Объяснить это в двух словах не получится - Вам нужно читать, программировать и думать.
0
 Аватар для PowerCat
0 / 2 / 1
Регистрация: 19.09.2013
Сообщений: 464
30.09.2015, 09:59  [ТС]
Я только на VB не работал с кастомными классами. Обычно я под Адроид делал проги.
Программирую много на VBA, но никогда до сегодня не возникало необходимости делать свои классы.

Меня интересуют именно LET и GET и их детское описание на микропримере. Остальные аспекты программирования не нужны.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38197 / 21130 / 4309
Регистрация: 12.02.2012
Сообщений: 34,737
Записей в блоге: 14
30.09.2015, 10:32
Цитата Сообщение от PowerCat Посмотреть сообщение
Обычно я под Адроид делал проги.
Цитата Сообщение от PowerCat Посмотреть сообщение
Программирую много на VBA
- при таком багаже что может быть непонятно? А детский пример я уже привел выше. Что же непонятно?
0
 Аватар для PowerCat
0 / 2 / 1
Регистрация: 19.09.2013
Сообщений: 464
30.09.2015, 10:37  [ТС]
Ну вот то и непонятно ))

Просто написать класс, который будет что-то делать с передаваемыми ему аргументами, выдавать результаты - это все понятно. Например, пишу класс, который будет проверять наличие русских букв в строке, потом создаю его экземпляр, кидаю ему строку и из него получаю ответ, например, False/True. Никаких летов и гетов я тут не использую.

Непонятно именно ЛЕТ и ГЕТ - для чего они, что с ними делать и как это использовать в работе.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38197 / 21130 / 4309
Регистрация: 12.02.2012
Сообщений: 34,737
Записей в блоге: 14
30.09.2015, 10:48
В твоем примере класс не использует полей, поэтому ему и не нужны Get/Let. Я же написал - эти конструкции используются для полей (свойств). А в твоем примере свойств нет - только метод, который проверяет наличие русских букв. Кстати, тут и класс не нужен - достаточно процедуры.

Интересно, а на андроиде ты на чем программировал? На на Jave?
0
 Аватар для PowerCat
0 / 2 / 1
Регистрация: 19.09.2013
Сообщений: 464
30.09.2015, 10:55  [ТС]
На андроиде - на Андроиде (джава под Андроид), изысканные извращения с массивами ((
Я в общем понимаю, что Лет и Гет нужны для свойств класса. Это мне и надо понятно и по-детски описать, ибо именно это я и не понимаю детально - что и как каждая эта псевдофункция делает. Я ж говорю - написать пример и написать для каждой его строчки "Получаем ..... заносим это в память...используется для...."

Общее описание не нужно, оно мне непонятно. Было б понятно - не пришел бы сюда )))

Добавлено через 3 минуты
Вот, нашел пример. Можно ли на его основе разжевать? То, что там приводится - непонятно.
http://www.firststeps.ru/vba/excel/r.php?20
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38197 / 21130 / 4309
Регистрация: 12.02.2012
Сообщений: 34,737
Записей в блоге: 14
30.09.2015, 10:57
Я же написал пример (11 строк) и что там непонятно?

И что непонятно в примере из "Первых шагов"? Что конкретно?
0
 Аватар для PowerCat
0 / 2 / 1
Регистрация: 19.09.2013
Сообщений: 464
30.09.2015, 11:01  [ТС]
Ну я не знаю, как еще написать, что мне непонятно ))
Вот выше ссылка на пример.
Можно ли его построчно объяснить, но не для программиста, а для нуба?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38197 / 21130 / 4309
Регистрация: 12.02.2012
Сообщений: 34,737
Записей в блоге: 14
30.09.2015, 11:50
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private NamePiple As String 'закрытая переменная для хранения знач. свойства
Private DatePiple As String  'закрытая переменная для хранения знач. свойства
 
Public Sub GetPipleName() '  Метод, устанавливающий значение NamePiple
    NamePiple = InputBox("Enter Name - ")
End Sub
 
Property Get PipleName() As String ' теперь у класса есть свойство PipleName, его можно читать
    PipleName = NamePiple ' возврат значения локальной переменной
End Property
 
Property Let PipleName(s As String) ' теперь свойству PipleName можно присвоить значение
    NamePiple = s  ' присвоение локальной переменной
End Property
0
 Аватар для PowerCat
0 / 2 / 1
Регистрация: 19.09.2013
Сообщений: 464
30.09.2015, 11:56  [ТС]
Ага. Благодарю.
Правильно ли я понимаю следующее:

Строка 9 - именно в ней происходит присвоение свойству значения?

Строка 13 - непонятно, что за S тут и откуда в ней должно появится значение, которое будет присвоено свойству.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38197 / 21130 / 4309
Регистрация: 12.02.2012
Сообщений: 34,737
Записей в блоге: 14
30.09.2015, 12:21
В строке 9 берется значение локальной переменной и возвращается как результат вызова Property Get. В реальности это произойдет, когда будет выполнено что-то вроде:

Visual Basic
1
  Имя=Obj.PipleName  ' здесь будет вызов Property Get
Про стр. 13. Property Let вызовется вот в таком контексте

Visual Basic
1
   Obj.PipleName=zzz  ' это превратится в вызов Property Let PipleName(zzz)
Добавлено через 45 секунд
Вообще все это хорошо будет видно в отладчике
0
 Аватар для PowerCat
0 / 2 / 1
Регистрация: 19.09.2013
Сообщений: 464
30.09.2015, 12:29  [ТС]
О! Вот, то, что требовалось!

Осталось понять в примере вызов InputBox. Как я понял, его вызов съэмулировал это Имя=Obj.PipleName, правильно?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38197 / 21130 / 4309
Регистрация: 12.02.2012
Сообщений: 34,737
Записей в блоге: 14
30.09.2015, 14:04
Цитата Сообщение от PowerCat Посмотреть сообщение
Как я понял, его вызов съэмулировал это Имя=Obj.PipleName, правильно?
- это другой способ установить свойство объекта. При таком способе Let не вызываетсяю
0
 Аватар для PowerCat
0 / 2 / 1
Регистрация: 19.09.2013
Сообщений: 464
30.09.2015, 15:00  [ТС]
Ясно.
Теперь еще по Лет..
Строчка 13 - непонятен механизм...Т.е. если я вызываю Obj.PipleName=zzz, то zzz - это входящий аргумент (по логике работы с функциями), а внутри - просто идет присвоение этого значения какому-либо полю (свойству), правильно?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38197 / 21130 / 4309
Регистрация: 12.02.2012
Сообщений: 34,737
Записей в блоге: 14
30.09.2015, 15:09
Цитата Сообщение от PowerCat Посмотреть сообщение
просто идет присвоение этого значения какому-либо полю (свойству), правильно?
- да.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.09.2015, 15:09
Помогаю со студенческими работами здесь

Перегрузка оператора "<<" для вывода пользовательских классов
Всем доброго времени суток. Пытаюсь сделать перегрузку оператора &quot;&lt;&lt;&quot; для того, чтобы можно было выводить объекты пользовательского класса...

Создание пользовательских классов
Задание Создать класс День: св-во- номер дня недели, метод- по номеру дня недели выдать &quot;Рабочий день&quot;, &quot;Суббота&quot;...

Копирование пользовательских классов
Вопрос таков: Есть у нас пользовательский класс MyProcess, listProcess - ArrayList объектов типа MyProcess, который заранее заполнен. ...

Преобразование пользовательских классов
у меня есть два класса: class Int; class Compl { float real; float image; public:

Массивы пользовательских классов.
Всем привет :) Пишу программулину для тестирования. Вопросы хранятся в БД. Стратегия следующая: загнать вопросы массив предварительно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru