Объектно-ориентированное программирование для пользователей Visual Basic 6.0
Обновлен: Ноябрь 2007
Visual Basic 6.0 поддерживает объектно-ориентированные элементы языка и объекты, распределенные в библиотеках. Visual Basic 2008 расширяет возможности объектно-ориентированного программирования путем поддержки всех свойств его языка.
Концептуальные различия
В разделе ниже перечислены средства объектно-ориентированного программирования в Visual Basic 2008 в сравнении с Visual Basic 6.0, где это применимо. Для каждого средства предоставлены ссылки на подробные разделы страниц справки, где можно найти дополнительные сведения.
Уровни доступа
В Visual Basic 6.0 для настройки уровней доступа для объявленных элементов используются ключевые слова Private, Friend, Public и Static.
В Visual Basic 2008 для настройки уровней доступа для объявленных элементов используются ключевые слова Private, Friend, Public и Static, а также новые ключевые слова Protected и Protected Friend. Уровень доступа объявленного элемента является доступной областью доступа к нему, то есть какой код имеет разрешение его чтения и записи.
Дополнительные сведения см. в разделах Уровни доступа в Visual Basic и Область видимости в Visual Basic.
Атрибуты
В Visual Basic 6.0 обеспечивается ограниченная поддержка внедренных атрибутов с помощью таких инструментов, как атрибуты процедур в интегрированной среде разработки Visual Basic.
В Visual Basic 2008Attribute является описанием, которое можно использовать для добавления примечания к типам и операторам членов типа, изменяя таким образом их значение или настраивая поведение. Например, примечания к операторам класса и операторам метода могут быть добавлены с помощью атрибутов.
Приложения разработчика и другие приложения, такие как компилятор Visual Basic, могут использовать отражение для доступа к атрибутам, чтобы определить, какие типы и члены типов могут быть использованы.
Атрибуты можно использовать для выполнения аспектно-ориентированного программирования (AOP) с помощью Visual Basic. Аспект — это часть программы, отделяющая ее бизнес-логику. Другими словами, для завершенной программы необязательно указывать домен, для которого она написана. Изоляция таких аспектов, как ведение журнала и сохраняемость, от бизнес-логики является целью аспектно-ориентированного программирования.
Дополнительные сведения см. в разделах Общие сведения об атрибутах в Visual Basic, Атрибуты, используемые в Visual Basic и Общие случаи использования атрибутов.
Двоичная совместимость
В Visual Basic 6.0 параметр Binary Compatibility позволяет автоматически сохранять идентификаторы класса и интерфейса предыдущей версии компонента, когда компилируется новая версия.
В Visual Basic 2008 параметр Binary Compatibility не поддерживается; вместо этого двоичная совместимость достигается с помощью атрибутов. Это позволяет непосредственно управлять сведениями, размещенными в компилируемом компоненте, такими как идентификаторы класса и интерфейса, смещения виртуальной таблицы и любые соответствующие атрибуты COM.
Дополнительные сведения см. в разделе Изменения в механизме обеспечения двоичной совместимости (для пользователей Visual Basic 6.0).
Модули класса
В Visual Basic 6.0 класс определяется в модуле класса. Один модуль класса сохраняется в отдельном типе файла с расширением CSL.
В Visual Basic 2008 класс определяется в операторе Class, указывающем имя и члены класса. Операторы Class хранятся в исходных файлах. Весь исходный файл можно просмотреть как простой текст.
Несколько операторов Class, также как другие операторы типа, могут храниться в одном исходном файле. Visual Basic не требует, чтобы имя исходного файла соответствовало оператору Class или типу, определенному в исходном файле.
Дополнительные сведения см. в разделе Оператор Class (Visual Basic).
Методы конструктора класса
В Visual Basic 6.0 для выполнения кода, который должен был быть выполнен во время создания объекта, используется обработчик событий Initialize класса, называемый Class_Initialize.
В Visual Basic 2008 для выполнения кода и инициализации переменных добавляется один или несколько конструкторов. Конструкторы представляют собой методы в классе с именем New. Метод New может быть перегруженным, чтобы обеспечить несколько конструкторов с именем New внутри того же оператора класса.
Дополнительные сведения см. в разделе New (Visual Basic) или Использование конструкторов и деструкторов.
Методы деструктора класса
В Visual Basic 6.0 для удаления связи переменной объекта их фактического объекта используется ключевое слово Nothing. Чтобы назначить Nothing переменной объекта, используется оператор Set.
В Visual Basic 2008 для большинства объектов, созданных приложением, необходимые задачи управления памятью может автоматически выполнить сборщик мусора. Однако для неуправляемых ресурсов требуется явная очистка. Основным типом неуправляемых ресурсов является объект, выполняющий упаковку системных ресурсов, таких как дескриптор файла, дескриптор окна или сетевое подключение.
При создании объекта, инкапсулирующего неуправляемый ресурс, рекомендуется предоставлять необходимый код для очистки неуправляемого ресурса в общем методе Dispose. Предоставление метода Dispose дает возможность пользователям явно освобождать память при завершении работы с объектом.
При использовании объекта, инкапсулирующего неуправляемый ресурс, следует помнить о методе Dispose и при необходимости вызывать его.
Дополнительные сведения см. в разделе Очистка неуправляемых ресурсов или Автоматическое управление памятью.
Class_Initialize
В Visual Basic 6.0, чтобы выполнить код, который должен быть выполнен во время создания объекта, событие Initialize класса может быть обработано с помощью метода Class_Initialize. Например, можно инициализировать значения переменных данных класса.
В Visual Basic 2008 событие Initialize и обработчик Class_Initialize не поддерживаются. Чтобы обеспечить инициализацию класса, добавьте один или несколько методов конструктора к определяемым классам и структурам.
Дополнительные сведения см. в разделе Изменения Class_Initialize для пользователей Visual Basic 6.0..
Классы данных
В Visual Basic 6.0 для работы с внешними данными, такими как базы данных Microsoft SQL Server, используются классы источника данных и потребителей сложных данных. Класс источника данных предоставляет данные из внешнего источника. Класс потребителя данных может быть привязан к внешнему источнику данных, такому как класс Data Source.
В Visual Basic 2008 для работы с внешними и внутренними данными используются источник данных, потребитель простых данных, потребитель сложных данных и классы привязки.
Дополнительные сведения см. в разделе Связывание данных и Windows Forms.
Свойство по умолчанию
В Visual Basic 6.0 любое свойство класса можно определить как свойство по умолчанию класса.
В Visual Basic 2008 членом по умолчанию класса или структуры может быть только свойство, которое принимает один или несколько аргументов. Члены свойства по умолчанию определяются посредством добавления ключевого слова Default в один оператор объявления свойства в классе или структуре.
Дополнительные сведения см. в разделе Изменения свойств по умолчанию для пользователей Visual Basic 6.0.
Делегаты
В Visual Basic 6.0 типы делегатов не поддерживаются.
В Visual Basic 2008 тип делегата является формой объектно-ориентированного указателя метода, позволяющего косвенно вызывать метод с помощью ссылки на него. Делегаты могут использоваться для подключения обработчиков событий и передачи метода из одного в другой.
Делегаты можно использовать для реализации асинхронного шаблона разработки. Например, с помощью асинхронного делегата программа может вызывать метод, который выполняет перечисление большого списка, пока основная программа продолжает выполняться. По завершении перечисления выполняется обратный вызов, и программа обращается к нему.
Дополнительные сведения см. в разделе Делегаты в Visual Basic или Практическое руководство. Передача процедур другой процедуре в Visual Basic.
Обработка ошибок
В Visual Basic 6.0 для неструктурированной обработки исключений используется оператор On Error.
В Visual Basic 2008 поддерживается как неструктурированная, так и структурированная обработка исключений. Структурированная обработка исключений является управляющей структурой, содержащей исключения, изолированные блоки кода и фильтры для создания механизма обработки исключений.
Дополнительные сведения см. в разделе Структурная обработка исключений в Visual Basic или Выбор между структурной и неструктурной обработкой исключений.
События
В Visual Basic 6.0 для объявления, создания и обработки событий используются ключевые слова Event, RaiseEvent и WithEvents.
В Visual Basic 2008 для объявления, создания и обработки событий используются ключевые слова Event, RaiseEvent и WithEvents, а также новые ключевые слова AddHandler, RemoveHandler и Handles.
Ключевые слова AddHandler и RemoveHandler позволяют динамически добавлять, удалять и изменять обработчик событий, связанный с событием.
Ключевое слово Handles позволяет определять предложение Handles для метода. Handles объявляет, что процедура выполняет обработку указанного события.
События в платформе .NET Framework основаны на модели делегата. Модель делегата основана на объектно-ориентированном шаблоне разработки наблюдателя.
Дополнительные сведения см. в разделе Практическое руководство. Написание обработчиков событий.
Универсальные типы
В Visual Basic 6.0 универсальные типы не поддерживаются.
В Visual Basic 2008 универсальные типы используются для реализации множественности параметров в программе Visual Basic. В универсальном коде не записывается упоминание о каком-либо отдельном типе, и поэтому в нем может прозрачно использоваться любое число новых типов.
Visual Basic 2008 поддерживает параметры типов для универсальных классов, структур, интерфейсов, процедур и делегатов. Соответствующий аргумент типа указывает время компиляции типа данных одного из элементов в универсальном типе.
Дополнительные сведения см. в разделе Универсальные типы в Visual Basic.
Глобальные классы
В Visual Basic 6.0 значение свойства Instancing класса определяет, является ли класс закрытым — то есть может ли использоваться только в одном компоненте или доступен другим приложениям для использования. Оно также определяет порядок создания экземпляров класса и вызова членов класса другими приложениями.
В Visual Basic 2008 свойство Instancing больше не поддерживается.
Чтобы предоставить классы в сборке другим сборкам, можно применить ключевое слово Public к операторам класса в сборке.
Можно использовать ссылку на внешнюю сборку как библиотеку классов, чтобы разрешить коду в приложении использовать классы Public из библиотеки классов.
Можно использовать ключевое слово Imports для импорта имен пространств имен из ссылочных проектов и сборок. Ключевое слово Imports также можно использовать для импорта имен пространств имен, определенных в том же проекте, что и файл, в котором присутствует данный оператор.
Для реализации общих членов можно применить ключевое слово Shared к членам классов и структур — полю, свойству и методу. Общие члены являются свойствами, процедурами и полями, общими для всех экземпляров класса или структуры. К общим членам класса можно обратиться без создания экземпляра класса.
Дополнительные сведения см. разделе Уровни доступа в Visual Basic, Ссылки и оператор Imports или Общие члены в Visual Basic.
Наследование реализации
В Visual Basic 6.0 наследование реализации не поддерживается.
В Visual Basic 2008 с помощью наследования реализации можно реализовать нерегламентированный полиморфизм. Это позволяет определять классы, которые могут попеременно использоваться клиентским кодом во время выполнения, но с функционально различными (хотя и идентично именованными) методами и свойствами.
Можно определить базовые классы, которые будут служить в качестве основы для производных классов. Производные классы наследуют и могут расширять свойства, методы и события базового класса. Производные классы могут также переопределять унаследованные методы новыми реализациями.
Дополнительные сведения см. в разделе Основы наследования или Употребление наследования.
Наследование интерфейса
Visual Basic 6.0 обеспечивает полиморфизм посредством нескольких интерфейсов ActiveX. В компоненте COM, который формирует инфраструктуру спецификации ActiveX, несколько интерфейсов позволяют системам программных компонентов развиваться, не нарушая существующий код.
В Visual Basic 2008 нерегламентированный полиморфизм можно реализовать с помощью ключевого слова Interface .NET Framework.
Несколько классов могут реализовывать один и тот же Interface, в то же время один класс может реализовывать один или несколько интерфейсов. Интерфейсы являются в основном определениями того, как класс должен отвечать на запросы. Интерфейс определяет методы, свойства и события, которые должен реализовать класс, и тип параметров, которые должен получать и возвращать каждый член, но оставляют отдельную реализацию этих членов реализующему интерфейс классу.
Преимущество нескольких интерфейсов состоит в том, что они позволяют системам программных компонентов развиваться, не нарушая существующий код.
Дополнительные сведения см. в разделе Полиморфизм на основе интерфейсов или Практическое руководство. Создание и реализация интерфейсов.
Методы: параметры ByVal и ByRef
В Visual Basic 6.0 аргументы передаются методу с помощью значения или ссылки. Если параметры метода не указаны явно с помощью ключевого слова ByVal или ByRef, аргументы неявно передаются с помощью ссылки (ByRef).
В Visual Basic 2008 аргументы передаются в метод с помощью значения или ссылки. Если параметры метода не указаны явно с помощью ключевого слова ByVal или ByRef, аргументы неявно передаются с помощью значения (ByVal).
Дополнительные сведения см. в разделе Передача аргументов по значению или по ссылке.
Методы: перегрузка
В Visual Basic 6.0 перегрузка метода не поддерживается.
В Visual Basic 2008 перегрузка Method используется для реализации нерегламентированного полиформизма в программе Visual Basic. Метод является перегруженным, когда в классе определенно больше одной версии метода. Перегруженные версии отличаются типами параметров и возвращаемых значений.
Дополнительные сведения см. в разделах Перегруженные свойства и методы и Обеспечение полиморфизма в Visual Basic.
Методы: переопределение
В Visual Basic 6.0 методы не могут быть переопределены.
В Visual Basic 2008 можно использовать ключевое слово Overrides для переопределения метода в производном классе, чтобы обеспечить другую реализацию метода из базового класса производного класса.
Дополнительные сведения см. в разделе Переопределение свойств и методов.
Метод: возвращение результатов
В Visual Basic 6.0 имя метода Function используется как имя переменной для возвращения результата метода Function.
В Visual Basic 2008 для возвращения результата метода Function используется ключевое слово Return.
Используйте Return, чтобы вернуть управление коду, вызвавшему метод Sub, Function или Property.
Дополнительные сведения см. в разделе Оператор Return (Visual Basic).
Функция My
В Visual Basic 2008 новая функция My позволяет выполнять быстрое объектно-ориентированное программирование с помощью Visual Basic, предоставляя точки входа для часто используемых классов и функций .NET Framework. Функция My обеспечивает новые высокоуровневые классы .NET Framework, которые объединяют связанные функциональные возможности в интерфейсы API на основе задач.
Дополнительные сведения см. в разделе Разработка с использованием My.
Ключевые слова MyBase, MyClass и Me
В Visual Basic 6.0 ключевое слово Me имеет такое же поведение, как неявно объявленная переменная. Если класс содержит несколько экземпляров, Me предоставляет способ ссылки на отдельный экземпляр класса, в котором выполняется код.
В Visual Basic 2008 ключевое слово MyBase предоставляет способ ссылки на базовый класс текущего экземпляра класса.
Ключевое слово MyClass предоставляет способ ссылки на текущий экземпляр класса без переопределения.
Ключевое слово Me предоставляет способ ссылки на отдельный экземпляр класса или структуры, где в текущий момент выполняется код.
Дополнительные сведения см. в разделе Me, My, MyBase и MyClass в Visual Basic.
Ключевое слово New
В Visual Basic 6.0 неправильное использование ключевого слова New может стать причиной необычного поведения повторной инициализации, которое может вызвать ошибки и чрезмерное использование памяти.
В Visual Basic 2008 ключевое слово New просто выделяет место объекту и не вызывает необычное поведение повторной инициализации.
Используйте предложение New в операторе объявления или операторе назначения. При выполнении оператора вызывается метод конструктора указанного класса, передавая предоставленные аргументы в предложение New. Это означает, что можно принудительно ограничить данные с момента создания экземпляра объекта.
Класс имеет один или несколько конструкторов. Конструкторы являются методами в методе с именем New. Несколько конструкторов определяются перегрузкой метода New в классе. Перегруженные методы конструкторов описываются как параметризованные конструкторы.
Дополнительные сведения см. в разделе New (Visual Basic).
Время существования объекта
В Visual Basic 6.0 время жизни объекта детерминировано; для каждого экземпляра объекта ведется свой счетчик ссылок. Когда освобождается последняя ссылка на экземпляр и показания счетчика равны нулю, выполняется немедленное завершение объекта.
В Visual Basic 2008 время жизни объекта недетерминировано; деструктор не обязательно вызывается сразу после освобождения последней ссылки. Это происходит потому, что общеязыковая среда выполнения поддерживает дерево ссылок, а не отдельные счетчики ссылок.
Сборщик мусора отслеживает дерево ссылок в фоновом режиме. При обнаружении объекта или группы объектов, не имеющих ссылок из исполняемого в данный момент кода, вызываются деструкторы всех таких объектов.
Порядок этого удаления невозможно предсказать, также как и время, которое требуется сборщику мусора, чтобы отследить дерево ссылок.
Дополнительные сведения см. в разделе Время существования в Visual Basic или Время существования: создание и уничтожение объектов.
Перегрузка оператора
В Visual Basic 6.0 перегрузка оператора не поддерживается.
В Visual Basic 2008 перегрузка оператора позволяет определить поведение стандартного оператора (такого как *, <> или And) для класса или структуры, определенной пользователем.
Дополнительные сведения см. в разделе Практическое руководство. Определение оператора преобразования.
Option Strict
В Visual Basic 6.0 во время выполнения используется проверка нестрогого типа.
В Visual Basic 2008 можно использовать оператор OPTION STRICT ON, чтобы включить проверку строгого типа во время конструирования вместо проверки разрешительного типа во время выполнения. По умолчанию используется OPTION STRICT OFF.
При преобразовании типов данных компилятор Visual Basic может работать в режиме строгой или разрешительной семантики типов. Если применяется строгая семантика типов (OPTION STRICT ON), неявными могут быть только расширяющие преобразования, сужающие преобразования должны быть явными. При использовании разрешительной семантики типов (OPTION STRICT OFF) все расширяющие и сужающие преобразования можно выполнять неявно. Семантика типов применяется к преобразованиям всех типов данных, включая типы объектов.
Дополнительные сведения см. в разделе Проверка типов в Visual Basic.
Синтаксис свойства
В Visual Basic 6.0 для получения и задания значений свойств используются операторы Property Get, Property Let и Property Set.
В Visual Basic 2008 используется унифицированный синтаксис объявления свойства, который включает в себя процедуры для возвращения и задания значения свойства. Это обеспечивает согласованность таких атрибутов свойств, как уровень доступа и перегрузка.
Дополнительные сведения см. в разделе Изменения свойств для пользователей Visual Basic 6.0.
Открытые интерфейсы
В Visual Basic 6.0 открытый интерфейс класса является набором его открытых членов.
В Visual Basic 2008 открытый интерфейс класса является набором его открытых членов, но абстрактный класс может использоваться для реализации подтипового полиморфизма в программе Visual Basic.
Абстрактный класс подобен классу Interface платформы .NET Framework. Абстрактный класс является одним из тех, которые созданы только для того, чтобы служить базовым классом для производных классов. Абстрактные классы часто используются для представления абстрактных понятий и сущностей.
Абстрактный класс не может создать экземпляр самого себя; он должен быть унаследованным. Некоторые или все члены этого класса могут оставаться нереализованными, их реализацию должен обеспечить наследующий класс. Реализованные члены можно все еще переопределить, и наследующий класс все еще может реализовывать дополнительные интерфейсы или другие функциональные возможности.
Дополнительные сведения см. в разделе MustInherit.
Неизменяемые свойства
В Visual Basic 6.0 исключение метода Set в процедуре Property создает неизменяемое свойство.
В Visual Basic 2008, чтобы сделать свойство неизменяемым, необходимо применить ключевое слово ReadOnly и исключить предложение Set свойства.
Также можно применить ключевое слово ReadOnly к полю, чтобы сделать его неизменяемым.
Дополнительные сведения см. в разделе ReadOnly (Visual Basic).
Отражение
В Visual Basic 6.0 отражение не поддерживается.
В Visual Basic 2008 классы в пространстве имен System.Reflection библиотеки классов платформы .NET Framework можно использовать для получения сведений о типах, таких как типы классов, интерфейсов и значений, во время выполнения и для создания экземпляров типов для их вызова и доступа к ним.
Дополнительные сведения см. в разделе Пространства имен отражений в Visual Studio.
Общие члены класса и структуры
В Visual Basic 2008 новое ключевое слово Shared можно применить к операторам Property, Sub, Dim, Function, Operator и Event, чтобы сделать их общими для всех экземпляров класса или структуры. К общим членам класса можно обратиться без создания экземпляра класса.
К общим членам можно обратиться через имя класса, а не экземпляр класса.
Дополнительные сведения см. в разделе Общие члены в Visual Basic.
Исходные файлы
В Visual Basic 2008 программы состоят из одного или нескольких исходных файлов. Исходные файлы хранятся в специальном типе файла с расширением VB. Операторы типов для таких типов, как классы, структуры, интерфейсы, перечисления и делегаты, а также операторы для стандартных модулей хранятся в файлах исходных кодов программы. Visual Basic не ограничивает исходные файлы определением только одного типа или требованием, чтобы имя исходного файла соответствовало типу, определенному в исходном файле.
Операторы частичного типа позволяют определять класс или структуру в нескольких исходных файлах. При компиляции программы с несколькими исходными файлами все исходные файлы обрабатываются вместе, как если бы перед обработкой они были объединены в один файл.
Дополнительные сведения см. в разделе Структура программы Visual Basic или Partial (Visual Basic).
Пользовательские типы
В Visual Basic 6.0 оператор Type используется для объединения переменных нескольких различных типов в один пользовательский тип, или UDT.
В Visual Basic 2008 для определения пользовательских типов значений используются операторы Structure и Enum.
Чтобы определить пользовательские ссылочные типы, используйте операторы Class, Interface и Delegate.
Дополнительные сведения см. в разделе Структуры: пользовательские типы данных.
Объявление переменных
В Visual Basic 6.0 можно объявить переменные разных типов в одном операторе. Если не указать тип данных переменной в операторе, он примет значение по умолчанию Variant.
В Visual Basic 2008 можно объявить несколько переменных одного и того же типа без указания типа данных каждой переменной в операторе.
Дополнительные сведения см. в разделе Объявление переменной в Visual Basic.
Замечания по обновлению
При обновлении приложения Visual Basic 6.0 до версии Visual Basic 2008 объектно-ориентированные конструкции кода преобразуются в их ближайший эквивалент Visual Basic 2008 наиболее подходящим способом. Итоговый код не следует принимать как пример выполнения объектно-ориентированного программирования в Visual Basic 2008.
Если нужно расширить обновленное приложение для использования объектно-ориентированных конструкций Visual Basic 2008, возможно, сначала потребуется изменить обновленный код. Следующие страницы могут помочь приступить к работе.
Классы (для пользователей Visual Basic 6.0)
Классы являются строительными блоками объектно-ориентированного приложения.Практическое руководство. Преобразование пользовательской коллекции в коллекцию со строгим типом Visual Basic
Visual Basic 2008 предоставляет несколько параметров для создания типизированных классов из пользовательских коллекций Visual Basic 6.0.Практическое руководство. Преобразование пользовательского типа в структуру Visual Basic
Оператор Type приложения Visual Basic 6.0 обновлен до оператора Structure приложения Visual Basic 2008.Практическое руководство. Преобразование кода оператора Implements в новую форму наследования
Последние версии Visual Basic предлагают два типа наследования, использующие оператор Implements и оператор Inherits.
См. также
Задачи
Пример объектно-ориентированного программирования
Основные понятия
Классы (для пользователей Visual Basic 6.0)
Изменения объектно-ориентированной модели модулей в Visual Basic
Изменения интерфейса для пользователей Visual Basic 6.0
Наследование для пользователей Visual Basic 6.0
Другие ресурсы
Сведения об изменениях в языке (для пользователей Visual Basic 6.0)