VBA: Зачем использовать свойства вместо подпрограмм или функций? - PullRequest
4 голосов
/ 31 марта 2011

Почему нам нужно использовать свойства Let, Get и Set в классе VBA, когда мы можем просто передавать и возвращать наши аргументы, используя подпрограммы или функции?

Ответы [ 3 ]

3 голосов
/ 04 апреля 2011

Вам не нужно ... для 90% всех приложений стандартный VBA как раз подходит. Используя классы, вы получаете больше «логического контроля» над вашим кодом.

Предположим, у вас есть функция Function IsUnique(MyArg as String) as Boolean, которая просматривает таблицу лиц с именем, переданным в MyArg, и возвращает TRUE, если имя не найдено в таблице. Ничто не мешает вам, например, вызвать эту функцию и передать строку любимого овоща, выбранного пользователем. Вы по-прежнему получите синтаксически правильную программу, несмотря на то, что этот вызов всегда будет возвращать TRUE, поскольку овощи хранятся где-то еще в этом приложении.

Теперь предположим, что у вас есть класс PersonClass, содержащий функции (= свойство) Name и IsUnique()

Ваш код, наконец, вам может понравиться

Dim MySpouse as PersonClass
    Set MySpouse = New PersonClass
    MySpouse.Name = "Fanny Hill"
    If MySpouse.IsUnique() Then
        MySpouse.Insert
    End If

То, что кажется излишним *, действительно инкапсулирует кодовые блоки, функции и переменные, относящиеся к Person (здесь называемые методы и свойства ), в класс и сделайте для своего кода более очевидным, что вы делаете с переменной, которая использует этот шаблон класса (или экземпляр этого класса)

Типичный пример: арифметика IP-адресов ..... (добавление IP-адресов, поиск базовых или широковещательных адресов, преобразование между различными обозначениями маски, проверка двух диапазонов на перекрытие, поиск маски сети вокруг двух или более IP-адресов и т. Д. И т. Д. И т. Д. и т. д.), необходимых в дюжине приложений: напишите модуль класса один раз, а после тестирования вы можете легко использовать его повторно.

Еще одним преимуществом классов является то, что при вводе кода в редакторе VBA завершение кода точно говорит вам, что вы можете сделать с классом (т. Е. Все свойства и методы представлены в раскрывающемся списке) - комфорт, который вы не делаете. с процедурами и функциями (они только сообщают вам имена и типы аргументов)

Достаточно?

2 голосов
/ 22 июля 2015

Я думаю, что короткий ответ - свойства являются характеристиками класса, а методы (подпрограммы) - действиями.

Моя интерпретация этого заключается в том, что свойства - это «прилагательные», а методы - «глаголы». Мы могли бы привести аналогию, чтобы проиллюстрировать это: у нас есть два вратаря НХЛ (давайте создадим их как членов clsGoalie), Кэри Прайс и Дастин Токарски. У каждого есть свойство, характерное для их уникального объекта "вратарь", который мы называем процент сохранения (pSavePercentage). Оба вратаря требуют одинакового метода для остановки удара по сети (скажем, Private Sub BlockShot), но их уникальные свойства будут влиять на производительность этого действия.

Ответ на вопрос, почему мы определяем характеристики класса со свойствами вместо возвращаемых значений, состоит в том, что свойства расширяют объект или, по сути, определяют объект. Возвращаемые значения не могут быть использованы для ссылки на объект, из которого они произошли. Вернемся к аналогии с вратарем ... Предположим, мы определили процент сохранения каждого из наших вратарей с помощью подпрограммы. Мы могли бы заставить его работать, но это потребовало бы больше кода в нашем основном методе. Сначала нам нужно «Dim SavePercentage As Double» (уже вы можете видеть, что мы вышли за пределы нашего объекта). Затем «SavePercentage = Price.calcSavePercentage». Наконец, нам нужно написать совершенно новый метод (в нашем Main или каком-то другом модуле), который мы затем передадим нашей новой переменной типа double в ... В этот момент мы даже не знаем, кто в сети. Прайс спас этот выстрел или это был Токарский? Смешение. В этом случае, если бы мы сохранили процент сохранения для свойства класса "clsGoalie", мы бы лучше использовали возможности ООП: чистый код и инкапсуляцию.

Надеюсь, это немного поможет.

1 голос
/ 31 марта 2011

Свойства для классов. Поэтому я думаю, что ваш вопрос заключается в следующем: «зачем использовать модули классов?». И действительно, вы можете годами создавать отличные приложения без этой необходимости.
Я начал использовать их для очень специфических целей, таких как чтение сложных текстовых файлов (печатные отчеты мэйнфреймов с логическими записями, охватывающими несколько физических строк) или получение конкретной информации из огромных и сложных таблиц Excel.
После того, как вы создали класс, имитирующий элемент, который вы хотите прочитать, вы можете повторно использовать этот класс из приложения в приложение и сосредоточиться на логике вашего конкретного приложения, а не на логике того же самого старого чтения того же самого старого файла, например .

...