Иллюстрированный самоучитель по VB.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).



Содержание раздела