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

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

Общедоступный

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

Public Class ClassForEverybody

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

Защищено

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

Protected Class ClassForMyHeirs

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

Friend

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

Friend stringForThisProject As String

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

Protected Friend

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

Protected Friend stringForProjectAndHeirs As String

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

Private

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

Private _numberForMeOnly As Integer

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

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

Частный защищенный

Сочетание закрытого защищенного ключевое слово в операторе объявления указывает, что элемент можно получить только из одного класса, а также производных классов, найденных в той же сборке, что и содержащий класс. Модификатор Private Protected доступа поддерживается начиная с Visual Basic 15.5.

В следующем примере показано Private Protected объявление:

Private Protected internalValue As Integer

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

Модификатор Private Protected доступа поддерживается Visual Basic 15.5 и более поздних версий. Чтобы использовать его, добавьте следующий элемент в файл проекта Visual Basic (*.vbproj). Если visual Basic 15.5 или более поздней версии установлен в системе, он позволяет воспользоваться всеми функциями языка, поддерживаемыми последней версией компилятора Visual Basic:

<PropertyGroup>
   <LangVersion>latest</LangVersion>
</PropertyGroup>

Чтобы использовать Private Protected модификатор доступа, необходимо добавить следующий элемент в файл проекта Visual Basic (*.vbproj):

<PropertyGroup>
   <LangVersion>15.5</LangVersion>
</PropertyGroup>

Дополнительные сведения см. в разделе "Настройка версии языка Visual Basic".

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

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

Модификатор доступа Уровень доступа предоставлен Элементы, которые можно объявить с помощью этого уровня доступа Контекст объявления, в котором можно использовать этот модификатор
Public Unrestricted:

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

Модули

Классы

Структуры

Элементы структуры

Процедуры

Свойства

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

Константы

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

События

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

Делегаты
Исходный файл

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

Интерфейс

Модуль

Класс

Структура
Protected Производный:

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

Классы

Структуры

Процедуры

Свойства

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

Константы

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

События

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

Делегаты
Класс
Friend Сборка:

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

Модули

Классы

Структуры

Элементы структуры

Процедуры

Свойства

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

Константы

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

События

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

Делегаты
Исходный файл

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

Интерфейс

Модуль

Класс

Структура
Protected Friend Protected Объединение и Friend:

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

Классы

Структуры

Процедуры

Свойства

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

Константы

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

События

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

Делегаты
Класс
Private Контекст объявления:

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

Классы

Структуры

Элементы структуры

Процедуры

Свойства

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

Константы

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

События

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

Делегаты
Модуль

Класс

Структура
Private Protected Код в классе, который объявляет закрытый защищенный элемент или код в производном классе, найденном в той же сборке, что и класс bas. Интерфейсы

Классы

Структуры

Процедуры

Свойства

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

Константы

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

События

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

Делегаты
Класс

См. также