Другое

Модификатор в языке С: определение, виды, инструкция по применению

Lorem ipsum dolor

Модификатор в языке С — это некое специальное слово, которое добавляется к методам, классам, переменным, функциям и и дает специальные «надстройки» основному компоненту. Модификаторы в С бывают разных видов. Например:

  • модификаторы параметров,

  • модификаторы типов данных,

  • модификаторы доступа,

  • и др.

Каждый отдельный вид модификаторов — это тема отдельной статьи. Поэтому сегодня мы поговорим про модификаторы доступа, а остальные виды оставим на потом.

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

Модификаторы доступа — это вид модификаторов, которые определяют и задают допустимую область доступа для класса, рядом с которым они располагаются. Все классы и методы в С имеют собственные модификаторы доступа.

Модификаторы доступа в С обозначаются следующими ключевыми словами:

  1. Ключевое слово «private». Закрывает и делает приватным компонент, с которым определяется. Открывает доступ к этому программному компоненту исключительно в пределах класса или структуры, где определяется сам модификатор.

  2. Ключевое выражение «private protected». Открывает доступ к этому программному компоненту из этого же класса или структуры, которая образовалась из этого же класса, где определен модификатор.

  3. Ключевое слово «protected». Открывает доступ к этому программному компоненту, как и «private protected», дополнительно открывает доступность для классов, участвующих в сторонних структурах.

  4. Ключевое слово «internal». Открывает доступ к программному компоненту из любого места того же кода или той же сборки, но оставляет компонент закрытым для сторонних программ и структур.

  5. Ключевое выражение «protected internal». Объединяет возможности доступа к компоненту двух модификаторов: «protected» и «internal».

  6. Ключевое слово «public». Это самый «открытый» модификатор доступа. Он делает компонент доступным откуда угодно: из любого места самой программы или из сторонних программ и структур.

Ограничение доступа при помощи модификаторов нагляднее видно в таблице:

Вид модификатора

Доступность в текущем объекте

Доступность во вторичном объекте этой же сборки

Доступность во вторичном объекте другой сборки

Доступность в не вторичном объекте этой же сборки

Доступность в не вторичном объекте другой сборки

Private

Открыта

Закрыта

Закрыта

Закрыта

Закрыта

Private protected

Открыта

Открыта

Закрыта

Закрыта

Закрыта

Protected

Открыта

Открыта

Открыта

Закрыта

Закрыта

Internal

Открыта

Открыта

Закрыта

Открыта

Закрыта

Protected internal

Открыта

Открыта

Открыта

Открыта

Закрыта

Public

Открыта

Открыта

Открыта

Открыта

Открыта

Модификаторы доступа применяются к компонентам класса. В компонентах структуры их тоже можно применять, исключив модификаторы «private», «protected», «protected internal». Если для компонентов явно не задается идентификатор, тогда к ним применяется модификатор «private», что делает компонент более закрытым. Это важный момент, который нужно учитывать.

Модификаторы доступа в С: пример в коде

Давайте придумаем произвольный класс и будем использовать разные модификаторы доступа:

class World

{

                 private object privateState = "State_is_private";

   

    protected private object protectedPrivateState = "State_is_protected_private";

    

    protected object protectedState = "State_is_protected";

    

    internal object internalState = "State_is_internal";

    

    protected internal object protectedInternalState= "State_is_protected_internal";

    

    public object publicState = "State_is_public";

 

 

    private void ReadPrivate() => Console.WriteLine(privateState);

 

  

    protected private void ReadProtectedPrivate() => Console.WriteLine(protectedPrivateState);

 

 

    protected void ReadProtected() => Console.WriteLine(protectedState);

 

    

    internal void ReadInternal() => Console.WriteLine(internalState);

 

 

    protected internal void ReadProtectedInternal() => Console.WriteLine(protectedInternalState);

 

    

    public void ReadPublic() => Console.WriteLine(publicState);

}

 

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

Давайте попробуем воспользоваться переменными объекта «World» в другом объекте, который локализуется в этом же программном продукте. Например:

class WorldCitizen

{

    public void PrintWorld()

    {

        World world = new World();

 

   

        Console.WriteLine(world .privateState); // Выдаст «error», в доступе отказано

 

        Console.WriteLine(world .protectedPrivateState); // Выдаст «error», в доступе отказано

 

   

        Console.WriteLine(world .protectedState); // Выдаст «error», в доступе отказано

 

   

        Console.WriteLine(world .internalState);//Не выдаст «error», получится присвоить величину

 

      

        Console.WriteLine(world .protectedInternalState); //Не выдаст «error», получится присвоить величину

 

       

        Console.WriteLine(world .publicState); //Не выдаст «error», получится присвоить величину

    }

}

 

Нетрудно заметить, что в классе «WorldCitezen» удалось получить доступность к переменным «internalState», «protectedInternalState» и «publicState» потому что только их модификаторы дают возможность обратиться к ним в рамках этого случая. Точно такая же ситуация будет и с методами класса «World».

Заключение

Модификаторы доступа в С помогают открывать или закрывать доступ к компонентам в той или иной ситуации. Как они ограничивают доступ к компонентам отлично видно в таблице, расположенной чуть выше. А в примере видно, как работают модификаторы в конкретной ситуации на практике. Принцип их работы разобрать нетрудно, но понимать их обязательно, так как это основа ООП.

Схожие статьи

Интересные факты о компьютере: подборка
Другое

Интересные факты о компьютере: подборка

Как стать продвинутым пользователем ПК в кратчайшие сроки без учителей?
Другое

Как стать продвинутым пользователем ПК в кратчайшие сроки без учителей?

Самые большие числа и какое число идет после гугла
Другое

Самые большие числа и какое число идет после гугла

Смарт-контракты: реальные примеры и основные понятия для новичков
Другое

Смарт-контракты: реальные примеры и основные понятия для новичков