Поделиться через


Классы: схемы объектов

Обновлен: Ноябрь 2007

Классы являются символьными представлениями объектов и описывают свойства, поля, методы и события, которые формируют объект таким же способом, как чертежи описывают элементы, составляющие здания. Отдельный класс может быть использован для создания необходимого количества объектов так же, как по чертежу можно построить несколько зданий. Используя инкапсуляцию, классы контролируют доступ к элементам объекта так же, как в чертеже указываются части здания, доступные для использования.

Классы и объекты

Термины класс и объект иногда используются в одном значении, но, в действительности, классы описывают структуру объектов, а объекты являются используемыми экземплярами классов. Каждый экземпляр является точной копией класса, однако отличается от него. Поскольку объект является экземпляром класса, процесс создания объекта называется созданием экземпляра.

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

Инкапсуляция

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

Без использования инкапсуляции необходимо объявить отдельно процедуры и переменные для хранения и управления информацией о банковском счете. Это затруднит одновременную работу с несколькими банковскими счетами. С инкапсуляцией можно использовать данные и процедуры в классе BankAccount как модуль. Одновременная работа с несколькими банковскими счетами без ошибок возможна благодаря представлению каждого счета уникальным экземпляром класса.

Инкапсуляция позволяет контролировать способы использования данных и процедур. Чтобы предотвратить выполнение методов класса или чтения и изменение данных в свойствах и полях внешними процедурами, можно использовать модификаторы доступа, например Private или Protected. Следует объявить внутренние сведения о классе как Private, чтобы предотвратить их использование вне класса. Этот прием называется скрытие данных, благодаря ему защищаются такие сведения клиента, как баланс счета.

Данные класса должны изменятся или извлекаться только процедурами или методами Property — это одно из базовых правил инкапсуляции. Сокрытие сведений о реализации классов предотвращает их использование нежелательным образом и позволяет позже изменять такие элементы без риска возникновения проблем с совместимостью. Например, более поздние версии класса BankAccount могут изменить тип данных поля AccountBalance, не нарушая работу других приложений, которые используют это поле с определенным типом данных.

Наследование

Как и структуры Visual Basic, классы можно использовать для определения типов данных, инкапсулирующих группу связанных элементов. Однако в отличие от структур, классы Visual Basic могут наследовать и расширять характеристики других классов. Классы, служащие основой для новых классов, называются базовыми классами. Классы, являющиеся производными от базовых, называются производными классами. Производные классы наследуют все поля, свойства, методы и события базового класса. Это значит, что можно разрабатывать класс и выполнять его отладку один раз, а затем повторно использовать его в качестве основы для других классов.

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

Class BankAccount
    Private AccountNumber As String
    Private AccountBalance As Decimal
    Private HoldOnAccount As Boolean = False
    Public Sub PostInterest()
        ' Add code to calculate the interest for this account.
    End Sub
    ReadOnly Property Balance() As Decimal
        Get
            ' Return the available balance.
            Return AccountBalance
        End Get
    End Property
End Class

Class CheckingAccount
    Inherits BankAccount
    Sub ProcessCheck()
        ' Add code to process a check drawn on this account.
    End Sub
End Class

Дополнительные сведения о наследовании см. в разделе Основы наследования.

Общие члены

По умолчанию данные класса индивидуальны для каждого экземпляра класса, но возможны случаи, когда необходимо совместное использование отдельного элемента данных во всех объектах, созданных из класса. В таких случаях используйте модификатор Shared, чтобы значение переменной было общим для всех экземпляров класса (общие члены в других языках программирования иногда называют "статическими членами"). При использовании имени класса возможен прямой вызов общих методов без предварительного создания экземпляра класса.

Дополнительные сведения об общих членах см. в разделе Общие члены в Visual Basic.

Переобъявление

Производные классы могут использовать ключевое слово Shadows для объявления члена с именем, совпадающим с именем наследуемого члена. Тип данных переобъявленных членов не обязательно должен совпадать с типом данных переобъявляемого члена. Например, свойство может переобъявлять переменную типа Integer.

Дополнительные сведения об общих членах см. в разделе Сокрытие в Visual Basic.

См. также

Основные понятия

Структуры и классы

Основы наследования

Общие члены в Visual Basic

Сокрытие в Visual Basic

Ссылки

Shadows

Shared (Visual Basic)

Другие ресурсы

Создание и использование объектов

Наследование в Visual Basic