VBA - Наименование и создание модуля класса

Рассмотрим модуль класса с именем: MyClass

Это может быть реализовано с помощью раннего связывания с использованием:

Dim cls As MyClass
Set cls = New MyClass

Но можно создать экземпляр с:

Dim MyClass As MyClass
Set MyClass = New MyClass

Таким образом, вы работаете с объектом с таким же именем.

Какие проблемы с этим?

1 ответ

Решение

VBA не чувствителен к регистру, как C#, поэтому class1 а также Class1 это одни и те же вещи..

В этом нет ничего серьезного (то есть: компилятор допускает это...) с использованием того же имени для экземпляра объекта, что и для его класса, за исключением того, что в целом было бы неправильно использовать такое же имя для экземпляра класса, как и для класса. его класс.

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

Предположим, что somone дал вам 20K+ строк кода с 50 классами и 150 его экземплярами. Он говорит: что-то не работает, и вы тот, кто отлаживает и находит, что не так... угр, я бы не хотел этого трогать...

Причина, по которой вы можете сделать это в VBA, заключается в том, что вы не можете создавать свои собственные статические классы в VBA, поэтому класс не предоставляет никаких свойств и не может быть статическим, поэтому при вызове Class1 Экземпляр intelli-sense будет показывать только доступные свойства экземпляра, а не классы. VBA также не поддерживает полиморфизм классов (поэтому нет таких средств доступа, как внутренняя защита и т. Д.), Поэтому невозможно извлечь из классов.

Другие вопросы по тегам