Иллюстрированный самоучитель по Visual Basic .NET

VB как объектно-ориентированный язык

Объектно-ориентированные средства VB5 и VB6 были, мягко говоря, ограниченными. В частности, эти версии VB не позволяли автоматически инициализировать данные класса при создании экземпляра. В результате объект создавался в неопределенном состоянии, что повышало вероятность ошибок и заставляло программиста принимать дополнительные меры предосторожности при работе с объектами. Для решения этой проблемы в VB.NET появились параметризованные конструкторы (см. главу 4).

Другим недостатком было отсутствие полноценного наследования (эта тема рассматривается в главе 5 [Наследование – штука полезная, но оно не является панацеей для написания объектно-ориентированных программ, как считают некоторые. Бесспорно, это важное, но не самое важное усовершенствование в VB.NET.]). Наследованием называется особая форма многократного использования кода, при которой программист определяет новые объекты на базе существующих объектов. Наследование очень хорошо подходит для таких задач, как создание нового текстового поля с расширенными возможностями на основании стандартного текстового поля. В VB версий 5 и 6 наследование не поддерживалось, поэтому для построения улучшенного текстового поля приходилось прибегать к услугам неудобной и ненадежной программы-мастера (wizard).

Рассмотрим другой пример, в котором было бы уместно наследование, – создание классов для работы со специализированными коллекциями. Чтобы создать коллекцию, специализировавшуюся на хранении строковых данных, в VB5 и 6 в класс включалось закрытое поле:

Private mCollection As Collection

В обработчиках событий Initialize и Terminate происходило выделение и освобождение памяти, используемой закрытой коллекцией. Затем программировались методы специализированной коллекции, предназначенные для внешнего использования. Большинство таких методов сводилось к простому вызову соответствующего метода закрытой коллекции, например:

Sub Add(Item As String)
mCollection.Add Item
End Sub

Но самое противное начиналось в том случае, если содержимое коллекции требовалось перебирать в цикле For Each. Для этого в модуль класса приходилось включать фрагменты вида:

Public Function NewEnum As lUnknown
Set NewEnum = mCollection.[_NewEnum]
End Function

Но и это не все – этой функции следовало присвоить идентификатор – 4!

Принцип "абракадабра – достаем из шляпы кролика!" хорош для фокусника, но не для программиста. При использовании наследования вся эта белиберда не нужна. В VB.NET достаточно написать:

Class MyCollection
Inherits Collection

…и вы получаете автоматическую поддержку For Each (см. главу 5).

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