Каждый из членов класса, будь то переменная или метод, да и сам класс имеют модификаторы доступа. Модификаторы доступа позволяют задать область видимости для членов класса. В VB.NET используются следующие модификаторы:
Public - публичный или открытый класс или член класса. Доступ к члену класса можно получить из любого места в коде, а к открытому классу - из других программ и сборок.
Private - закрытый класс или член класса. Доступ к данному классу или члену класса, можно получить только из кода в том же классе или контексте.
Friend - класс или член класса с данным модификатором доступен из текущей сборки или только в пределах данной программы.
Protected - применяется либо к членам класса, либо к вложенным классам. Такие классы или члены класа только из самого класса, либо из наследующих классов.
Protected Friend - применяется либо к членам класса, либо к вложенным классам. Данный модификатор объединяет контексты Friend и Protected. Поэтому классы и члены класса с данным модификатором доступны либо из текущей программы, либо из наследующих классов.
Объявление переменных с оператором Dim аналогично объявлению этих переменных с модификатором Private.
Посмотрим на примере использование модификаторов доступа. Создадим следующий класс State:
Public Class State Dim a As Integer 'Все равно что Private a As Integer Private b As Integer 'Доступна только из текущего класса Protected c As Integer 'Доступна из текущего класса и классов-наследников Friend d As Integer 'Доступна в любом месте программы Protected Friend e As Integer 'Доступна в любом месте программы и из классов-наследников Public f As Integer 'Доступна везде Private Sub Display_f() Console.WriteLine("Переменная f = {0}", f) End Sub Public Sub Display_a() Console.WriteLine("Переменная a = {0}", a) End Sub Friend Sub Display_b() Console.WriteLine("Переменная b = {0}", b) End Sub Protected Sub Display_e() Console.WriteLine("Переменная e = {0}", e) End Sub End Class
Поскольку этот класс объявлен как Public, он будет доступен из любого места программы. У нас создано пять переменных для каждого уровня доступа и одна переменная с оператором Dim. Также у нас созданы четыре метода, которые будут выводить значения переменных на экран. Обратите внимание, что так как все модификаторы позволяют использовать члены класса внутри данного класса, то и все переменные класса у нас доступны его методам. Теперь посмотрим, как мы сможем использовать переменные нашего класса в программе:
Module Module1 Sub Main() Dim state1 As New State() 'присвоить значение переменной a у нас не получиться, 'так как она закрытая и модуль ее не видит 'И данную строку среда подчеркнет как неправильную state1.a = 4 Ошибка, получить доступ нельзя 'то же самое относится и к переменной b state1.b = 3 Ошибка, получить доступ нельзя 'присвоить значение переменной с то же не получиться, 'так как модуль не является классом-наследником класса State state1.c = 1 Ошибка, получить доступ нельзя 'переменная d доступна из любого места программы 'поэтому спокойно присваиваем ей значение state1.d = 5 'переменная e так же доступна из любого места программы state1.e = 8 'переменная f общедоступна state1.f = 8 'Попробуем вывести значения переменных 'Так как этот метод объявлен как Private, мы можем использовать его только внутри класса state1.Display_f() Ошибка, получить доступ нельзя 'Так как этот метод объявлен как Protected, а модуль не является наследником класса State state1.Display_e() Ошибка, получить доступ нельзя 'Общедоступный метод state1.Display_a() 'Метод доступен из любого места программы state1.Display_b() Console.ReadLine() End Sub End Module
Таким образом, мы смогли установить только переменные d, e
и f
. И нам оказались доступны только два метода:
state1.Display_a()
и state1.Display_b()
. Но так как мы переменные a и b не смогли установить, то эти методы вывели нули,
так как значение переменных типа Integer по умолчанию равно нулю.
Несмотря на то, что модификаторы Friend и Public похожи по своему действию, но они имеют большое отличие. Классы и члены класса с модификатором Public также будут доступны и другим программам, если данных класс поместить в динамическую библиотеку dll и потом ее использовать в этих программах.
Благодаря такой системе модификаторов мы можем скрыть некоторые моменты реализации класса от других частей программы, такое сокрытие называется инкапсуляцией.