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 также не поддерживает полиморфизм классов (поэтому нет таких средств доступа, как внутренняя защита и т. Д.), Поэтому невозможно извлечь из классов.