Уровни доступа в 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