Уровни доступа в Visual Basic

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

access level объявленного элемента указывает объем доступа к нему, то есть какой код имеет разрешение на его чтение и запись в него. Он определяется не только способом объявления элемента, но и уровнем доступа контейнера элемента. Код, который не имеет доступа к вмещающему элементу не может получить доступ к любым из содержащихся в нем элементов, даже если они объявлены как Public. Например, к переменной Public в структуре Private можно получить доступ внутри класса, который содержит структуру, но не за пределами этого класса.

Public

Ключевое слово Public (Visual Basic) в операторе объявления указывает, что к элементу можно получить доступ в любом месте кода в том же проекте, из других проектов, которые ссылаются на проект и из любой сборки, созданную из проекта. Следующий код демонстрирует пример объявления Public:

Public Class classForEverybody

Можно использовать Public только на уровне пространства имен, интерфейса или модуля. Это означает, что можно объявить открытый элемент на уровне исходного файла или пространства имен, или внутри интерфейса, модуля, класса или структуры, но не в процедуре.

Protected

Ключевое слово Protected (Visual Basic) в операторе объявления указывает, что доступ к элементам может осуществляться только внутри самого класса, или из класса, производного от этого класса. Следующий код демонстрирует пример объявления Protected:

Protected Class classForMyHeirs

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

Friend

Ключевое слово Friend (Visual Basic) в операторе объявления указывает, что доступ к элементам может осуществляться в самой сборке, но не за ее пределами. Следующий код демонстрирует пример объявления Friend:

Friend stringForThisProject As String

Можно использовать Friend только на уровне пространства имен, интерфейса или модуля. Это означает, что можно объявить дружественный элемент на уровне исходного файла или пространства имен, или внутри интерфейса, модуля, класса или структуры, но не в процедуре.

Protected Friend

Ключевые слова Protected и Friend, используемые в операторе объявления вместе, указывают, что к элементам можно обратиться либо из производных классов либо из сборки или при соблюдении обоих условий. Следующий код демонстрирует пример объявления ProtectedFriend:

Protected Friend stringForProjectAndHeirs As String

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

Private

Ключевое слово Private (Visual Basic) в операторе объявления указывает, что доступ к элементам может осуществляться только внутри самого модуля, класса или структуры. Следующий код демонстрирует пример объявления Private:

Private numberForMeOnly As Integer

Можно использовать зарезервированное слово Private только на уровне модуля. Это означает, что можно объявить закрытый элемент внутри модуля, класса или структуры, но не на уровне исходного файла или пространства имен, а также не внутри интерфейса или процедуры.

На уровне модуля оператор Dim без любого ключевого слова уровня доступа эквивалентен объявлению Private. Однако зарезервированное слово Private можно использовать для более легкого чтения и восприятия кода.

Модификаторы доступа

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

Модификатор доступа

Предоставляемый уровень доступа

Элементы, которые можно объявить с этим уровнем доступа

Контекст объявления, в котором можно использовать этот модификатор

Public

Неограниченный доступ:

Любой код, которому "виден" открытый элемент, может получить доступ к нему

Интерфейсы

Модули

Классы

Структуры

Члены структуры

Процедуры

Свойства

Переменные-члены

Константы

Перечисления

События

Внешние объявления

Делегаты

Исходный файл

Пространство имен

Интерфейс

Модуль

Класс

Структура

Protected

По наследованию:

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

Интерфейсы

Классы

Структуры

Процедуры

Свойства

Переменные-члены

Константы

Перечисления

События

Внешние объявления

Делегаты

Класс

Friend

Сборка:

Код в сборке, в которой объявлен дружественный элемент, может получить к нему доступ

Интерфейсы

Модули

Классы

Структуры

Члены структуры

Процедуры

Свойства

Переменные-члены

Константы

Перечисления

События

Внешние объявления

Делегаты

Исходный файл

Пространство имен

Интерфейс

Модуль

Класс

Структура

ProtectedFriend

Объединение Protected и Friend:

Код в самом классе или в той же сборке, что и защищенный дружественный элемент, или в любом классе, производном от класса элемента, может получить к нему доступ

Интерфейсы

Классы

Структуры

Процедуры

Свойства

Переменные-члены

Константы

Перечисления

События

Внешние объявления

Делегаты

Класс

Private

Контекст объявления:

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

Интерфейсы

Классы

Структуры

Члены структуры

Процедуры

Свойства

Переменные-члены

Константы

Перечисления

События

Внешние объявления

Делегаты

Модуль

Класс

Структура

См. также

Задачи

Практическое руководство. Управление доступностью переменной

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

Имена объявленных элементов

Характеристики объявленных элементов

Время существования в Visual Basic

Область видимости в Visual Basic

Переменные в Visual Basic

Объявление переменной в Visual Basic

Ссылки

Оператор Dim (Visual Basic)

Static (Visual Basic)

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

Ссылки на объявленные элементы