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

Последнее обновление: 30.10.2015

Каждый из членов класса, будь то переменная или метод, да и сам класс имеют модификаторы доступа. Модификаторы доступа позволяют задать область видимости для членов класса. В 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 и потом ее использовать в этих программах.

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

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850