Уровни доступа в Visual Basic
Уровень доступа объявленного элемента — это степень возможности доступа к нему, то есть какой код имеет разрешение на чтение или запись в него. Это определяется не только тем, как объявлять сам элемент, но и уровнем доступа контейнера элемента. Код, который не может получить доступ к содержаемому элементу, не может получить доступ к любому из его содержащихся элементов, даже объявленных как Public
. Например, Public
к переменной Private
в структуре можно получить доступ из класса, содержащего структуру, но не извне этого класса.
Общедоступный
Ключевое слово Public в инструкции объявления указывает, что элемент можно получить из кода в любом месте того же проекта, из других проектов, ссылающихся на проект, и из любой сборки, созданной из проекта. В следующем коде показан пример Public
объявления:
Public Class ClassForEverybody
Можно использовать Public
только на уровне модуля, интерфейса или пространства имен. Это означает, что общедоступный элемент можно объявить на уровне исходного файла или пространства имен, а также в интерфейсе, модуле, классе или структуре, но не в процедуре.
Защищено
Ключевое слово Protected в операторе объявления указывает, что элемент можно получить только из одного класса или из класса, производного от этого класса. В следующем коде показан пример Protected
объявления:
Protected Class ClassForMyHeirs
Можно использовать Protected
только на уровне класса и только при объявлении члена класса. Это означает, что вы можете объявить защищенный элемент в классе, но не на уровне исходного файла или пространства имен, а также в интерфейсе, модуле, структуре или процедуре.
Friend
Ключевое слово Friend в операторе объявления указывает, что элемент можно получить из одной сборки, но не извне сборки. В следующем коде показан пример Friend
объявления:
Friend stringForThisProject As String
Можно использовать Friend
только на уровне модуля, интерфейса или пространства имен. Это означает, что вы можете объявить другой элемент на уровне исходного файла или пространства имен, а также в интерфейсе, модуле, классе или структуре, но не в процедуре.
Protected Friend
Сочетание ключевого слова Protected Friend в операторе объявления указывает, что к элементу можно получить доступ из производных классов или из одной сборки или обоих. В следующем коде показан пример Protected Friend
объявления:
Protected Friend stringForProjectAndHeirs As String
Можно использовать Protected Friend
только на уровне класса и только при объявлении члена класса. Это означает, что вы можете объявить защищенный друг-элемент в классе, но не на уровне исходного файла или пространства имен или в интерфейсе, модуле, структуре или процедуре.
Private
Ключевое слово Private в инструкции объявления указывает, что элемент можно получить только из одного модуля, класса или структуры. В следующем коде показан пример Private
объявления:
Private _numberForMeOnly As Integer
Private
можно использовать только на уровне модуля. Это означает, что частный элемент можно объявить внутри модуля, класса или структуры, но не на уровне исходного файла или пространства имен, внутри интерфейса или процедуры.
На уровне Dim
модуля оператор без ключевых слов уровня доступа эквивалентен объявлению Private
. Однако может потребоваться использовать ключевое Private
слово, чтобы упростить чтение и интерпретацию кода.
Частный защищенный
Сочетание ключевых слов Private Protected в операторе объявления указывает, что элемент можно получить только из одного класса, а также производных классов, найденных в той же сборке, что и содержащий класс. Модификатор 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. | Интерфейсы Классы Структуры Процедуры Свойства Переменные-члены Константы Перечисления События Внешние объявления Делегаты |
Класс |