|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Привет всем, только что сделал маленькое открытие, что нельзя создавать статичные переменные в полях класса VBA. Сама суть статичной переменной - иметь одно значение вне зависимости от количества инициализированных экземпляров класса. И если её изменять в любом из экземпляров класса, она автоматом становится такой же во всех. Если писать на Java, то создать можно одной строчкой (внизу код основного класса и проверки этого основного класса.): Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
Как вы думаете, как повторить такой же челендж на ВБА?)) Без создания дополнительной глобальной переменной в модуле VBA и дополнительной процедуры в классе ,которая ссылается на эту переменную. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 15:24 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Сергей Лалов Если писать на Java, то создать можно одной строчкой (внизу код основного класса и проверки этого основного класса.): Сергей Лалов Без создания дополнительной глобальной переменной в модуле VBA и дополнительной процедуры в классе ,которая ссылается на эту переменную. На vba ни одной строчки - просто хранить такие переменные в таблице :) и доставать д-лукапом ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 16:13 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
vmag На vba ни одной строчки - просто хранить такие переменные в таблице :) и доставать д-лукапом ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 16:22 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Сергей Лалов, я так понимаю все студенты заведения будут учиться на одном курсе? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 16:27 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
vmag На vba ни одной строчки - просто хранить такие переменные в таблице :) и доставать д-лукапом Не, это не получится статика) И даже если хранить в глобальных переменных , и потом в классах ссылаться на значения этой глобальной переменной, то это тоже не статика) Потому что в каждом экземпляре класса при таком подходе придется принудительно дополнительным методом приравнивать значение такой "статической" переменной. Это уже не статика) А для настоящей статической переменной никаких дополнительных действий не нужно, она имеет одно значения на все экземпляры класса,вне зависимости от того ,сколько их инициализировал. И если её поменять хоть в одном экземпляре ,во всех остальных она станет такой же измененной (без всяких циклов и всего прочего). В этом вся её соль) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 16:29 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Панург, Это пример работы статики. Есть группа студентов ,которая учится на одном курсе. Считаем что что все нормально учатся и одновременно переходят с курса на курс. Как мы бы с вами реализовали с возможностями VBA такой переход: Есть группа студентов (объекты) с полями учебный курс. 1) Помещаем студентов в коллекцию (название коллекции к примеру учебный курс) 2) При переходе с курса на курс - проходим циклом каждого студента в коллекции и меняем у него курс с одного на другой . Что дало бы необрезанное ООП в VBA. (с нормальными статическими членами в классе.) 1) Мы ничего нигде не гоняем и просто изменяем значение одной статической переменной данного класса. Класс.курс=4; ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 16:38 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Сергей Лалов, ответ я тебе дал. Зачем сюда тащить приёмы других ЯП? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 16:42 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Панург Сергей Лалов, ответ я тебе дал. Зачем сюда тащить приёмы других ЯП? Спасибо, сейчас помучаю посмотрю. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 16:45 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Панург, Посмотрел, это просто коллекция /хранилище глобальных переменных. В модуль класса это не впихнуть, а если дописывать процедуру обработки в обычном дополнительном модуле, то это уже не true. Как вы представляете класс ГруппаСтудентов , в котором переменная ссылается на tempvars (или простую глобальную переменную) и одновременно может и принимать и отдавать значение?) Я плотно поштудировал эту тему , со статическими членами. Работают они только как переменные внутри процедуры/функции (к примеру Static x внутри функции/процедуры), либо как сами процедуры/функции (static function тратата). Задать их внутри класса как переменные к сожалению нельзя( ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 17:33 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
А побрюзжать: Сергей Лалов ... 2) При переходе с курса на курс - проходим циклом каждого студента в коллекции и меняем у него курс с одного на другой . ... И грохаем всю историю. :) Этот подход совершенно неприемлем в БД. Приемлемое решение: На основании приказа по учебному заведению персоны: Иванов, Петров, Сидоров и т.д. зачисляются на новый курс (новую группу) в таком-то учебном году. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 17:43 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Сергей Лалов Посмотрел, это просто коллекция /хранилище глобальных переменных. В модуль класса это не впихнуть ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 17:55 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Predeclared, ну если в контексте именно организации учебного процесса рассматривать, то так то да) У Панурга идея использовать дополнительный буфер (пусть это TempVars, ну или просто глобальная переменная). Это механическое решение проблемы. У нас все равно есть лишняя спрятанная переменная внутри класса. Вот кстати образец имитации статической переменной в классе VBA, накидал через проперти только что, в копилку, в сети есть примеры через дополнительную функцию, которая возвращает экземляр класса (маскируется под статику, ..или даже скорее под реализацию вашего ника VB_PredeclaredId = publicNotCreatable )) Вот мое механическое решение через проперти: 1) Создаем обычную глобальную переменную в обычном модуле: Код: vbnet 1.
2) Создаем класс Students с пропертями ,которые обращаются к этой глобальной переменной (которая является подсадной уткой- имитацией переменной типа static) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 18:03 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Панург, Уже написал, но это не тру) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 18:12 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Сергей Лалов, От нас то ты чего хочешь? Превратить VBA в java или c#? Кстати, публичная переменная слетит при необработанной ошибке, TempVars - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 18:18 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Поправил... Сергей Лалов Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 18:22 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Нонсенс в необходимости наличия такой переменной именно в описании класса - айтема коллекции. Значение такой переменной не описывает свойство конкретного айтема коллекции, оно описывает свойство самой коллекции (в вашем примере - курс). И находится она, соответственно, должна в описании класса-коллекции. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 18:48 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Сергей Лалов ....Есть группа студентов (объекты) с полями учебный курс. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 18:52 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Панург, да, спасибо, первая переменная была в общем то не нужна) В общем с чего все началось)), описываю историю вкратце, решил я как то написать игрушку на VBA, в ООП стиле, написал работоспособный блок в экселе. Обычную леталку стрелялку, как на денди. Извернулся с картами текстур и объектов. (координаты ячейки и цвет ячейки записывается в коллекцию , а потом при нажатии на стрелки влево,вверх,вниз и право создается новая ячейка и перерисовывается.) Проблема заключается в том, что корабль состоит из множества ячеек которые хранятся в коллекции. И на нажатие стрелки к примеру влево необходимо перерисовывать каждую в коллекции. ) Так как VBA по умолчанию это один поток, то скорость отрисовки при увеличении количества объектов на листе (другие корабли, снаряды,оружие) скорость игры все будет сильней и сильней замедляться. И вот здесь бы как раз подошла концепция статической переменной в классе, где я менял бы ее к примеру одну, с 0 на -1 и все ячейки в коллекции автоматом без цикла шагали на column -1 . При механической реализации статики все равно нужно дополнительное действие, чтобы переопределить значение каждой ячейки (потому что property это та же самая процедура,к которой нужно дополнительно обратится. В настоящей переменной типа Static она сразу меняется везде, без дополнительных подталкиваний.) Вот работоспособный пример игры кстати , приложил в письме, с пятницей!) Все летает, но пока без врагов и оружия. Просто первый блок. Корабль можно отрисовать любой, на соседнем листе ships. Что рисуете, то и летает)) Скорее всего придется переписывать и укрупнять корабль до объекта Range. И управлять им, потому что с обработкой коллекций при увеличении объектов на экране один поток/табличный процессор не справиться) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 18:52 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Вдогонку:после того как опубликовал свое глянул спойлер сообщения Predeclared в котором все правильно пояснено-назовите хоть одно учебное заведение где студент переводится с курса на курс не приказом по ВУЗу,а в результате вычислений произведенных компьютером ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 19:01 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Predeclared Нонсенс в необходимости наличия такой переменной именно в описании класса - айтема коллекции. Значение такой переменной не описывает свойство конкретного айтема коллекции, оно описывает свойство самой коллекции (в вашем примере - курс). И находится она, соответственно, должна в описании класса-коллекции. Это мы статику почти не используем в VBA и настороженно относимся, её красота в том, что не надо прикладывать дополнительных вычислений, процедур действий, чтобы изменить значение сразу у всех экземпляров полей класса) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 19:15 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
sdku, тут вопрос больше в сравнении ООП нескольких ЯП. Что где можно, что нельзя, и если можно- то как) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 19:16 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
sdku Стесняюсь спросить:а зачем такое поле? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 19:47 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Да, как сказал Панург , если мы рассматриваем ООП с позиции составляющих класса, то условно делим на три составляющих: 1) Поле класса (это ваши Public x,Private x, Friend x ) переменная которая находится внутри класса. 2) Метод класса (это обычные Function либо Sub ,которые вы впихиваете внутрь класса. Бывают Public,Private,Static,Friend) 3) Свойства класса (это Property, также бывают public,private итд.) По сути третий можно было впихнуть во второй, но MS оформил отдельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 19:59 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Сергей Лалов Сама суть статичной переменной - иметь одно значение вне зависимости от количества инициализированных экземпляров класса. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 20:01 |
|
Статичные переменные в полях класса VBA
|
|||
---|---|---|---|
#18+
Сергей Лалов если мы рассматриваем ООП с позиции составляющих класса, то условно делим на три составляющих: 1) Поле класса (это ваши Public x,Private x, Friend x ) переменная которая находится внутри класса. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2019, 20:03 |
|
|
start [/forum/topic.php?fid=45&fpage=24&tid=1610364]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
117ms |
get tp. blocked users: |
1ms |
others: | 311ms |
total: | 511ms |
0 / 0 |