Есть ли техническая причина, по которой я не могу объявить открытый массив в классе VBA? - PullRequest
0 голосов
/ 27 августа 2018

Я только что обнаружил, что, по-видимому, невозможно объявить открытый массив в классе VBA, хотя можно объявить его закрытым.

Мне интересно, имеет ли это техническую причину или этовыбор дизайна со стороны Microsoft.

Любое объяснение не имеет для меня особого смысла: я не вижу технической причины, которая помешала бы участнику быть приватным, в то время как может быть публичным, как этоэто только проверка доступа, которая проверяется во время выполнения.

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

Буду признателен, если кто-нибудь сможет объяснить рациональное, стоящее за всем этим.

1 Ответ

0 голосов
/ 27 августа 2018

Я полагаю, вам нужно спросить людей, создавших язык программирования Visual Basic (или, может быть, даже Basic), «почему».Кажется, это присуще языкам.Насколько VBA идет, ограничение исходит от VB6, на котором базируется VBA.Я нахожу эту ссылку в поиске Google:

Объявление данных как открытых в форме означает, что вы создаете свойство для этой формы, используя сокращенный синтаксис.Свойство не может быть массивом с использованием этого сокращенного синтаксиса.

Другими словами, «Public» означает «глобальный» только для устаревших статических (BAS) модулей.Для всего остального Public означает нечто совершенно иное.

И this :

Вместо массивов вы можете использовать объект Collection или свой собственный класс Collection.,VB6 не позволяет объявлять константы, массивы, определяемые пользователем типы как общедоступные.

Из раздела справки VBA Константы, строки фиксированной длины, массивы, определяемые пользователем типы и операторы Declareне допускается в качестве открытых членов объектного модуля

Не все переменные в объектном модуле могут быть объявлены как открытые.Тем не менее, процедуры являются открытыми по умолчанию, и процедуры Property могут использоваться для синтаксического моделирования переменных.Эта ошибка имеет следующие причины и решения:

Относительно массивов, в частности

Вы объявили открытый массив в объектном модуле.Хотя процедура не может вернуть массив, она может вернуть вариант, содержащий массив.Для имитации массива Public в модуле класса используйте набор процедур Property, которые принимают и возвращают вариант, содержащий массив.

...