Спецификаторы доступа C#

Спецификаторы доступа C#

Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье вы узнали, как работать со строками в C#. В данной статье я бы хотел подробнее остановиться на такой теме, как спецификаторы доступа в C# (по сути, существует 2 вида спецификаторов доступа: открытые и закрытые). Доступ к членам класса осуществляется с помощью следующих спецификаторов доступа: public, private, protected, internal. Здесь я буду рассматривать только public и private. Спецификатор protected используется при включении интерфейсов (наследование), а спецификатор internal используется крайне редко и применяется при использовании компоновочных файлов.

Спецификатор public разрешает доступ к данному члену классу из любой части программы, т.е. другими словами любой метод или член другого класса может получить доступ к члену класса, у которого спецификатор стоит public.
В свою очередь, private запрещает открытый доступ к члену класса, т.е. доступ к нему имеет только члены и методы данного класса. Из других классов получить доступ к данному члену класса (у которого стоит спецификатор доступа private) нельзя.

Также отмечу, что, если перед членом класса не стоит спецификатор доступа, то он по умолчанию является закрытым!!!.
Давайте на конкретном примере рассмотрим работу данных спецификаторов доступа:

class MyRoom
    {
        private double width; //закрытый член класса
        public double height; //открытый член класса
        double length;// по умолчанию закрытый член

        public void setWidth(double w)
        {
            width = w;
        }

        public double getWidth()
        {
            return width;
        }

        public void setLength(double l)
        {
            length = l;
        }

        public double getLength()
        {
            return length;
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            MyRoom room = new MyRoom();
            room.setWidth(4); //присваиваем значение через открытый метод setWidth()
            room.setLength(7); //присваиваем значение через открытый метод setLength()
            room.height = 2.5; //присваиваем значение напрямую, так как данный член открыт

            Console.WriteLine(
                "Ширина комнаты = " + room.getWidth() + Environment.NewLine+
                "Длина комнаты = " + room.getLength() + Environment.NewLine+
                "Высота комнаты = " + room.height
                );
            Console.ReadLine();
        }
    }

Если мы запустим данный код, то увидим, что всё работает и выводится нормально. Обратите внимание, что закрытым членам класса width и length мы присваивали значения через открытые методы setWidth() и setLength(). Если мы попытаемся сделать это напрямую через room.width, то программа не запустится, и компилятор выдаст ошибку. Ошибка заключается в том, что из класса Program нельзя получить доступ к закрытому члену класса MyRoom.

А вот к полю height класса MyRoom можно получить доступ от куда угодно, так как спецификатор доступа стоит public.

Некоторые рекомендации по спецификаторам доступа:

1) Члены класса, которые используются только внутри класса, необходимо объявлять закрытыми.

2) Хотя член класса и является по умолчанию private, и данный спецификатор можно не указывать, я вам рекомендую всё же его ставить для наглядности программы и её более удобного чтения.

3) Методы, которые возвращают и устанавливают значения закрытым полям класса, нужно делать открытыми.

В данной статье вы узнали, что такое спецификаторы доступа в C#, а также более подробно рассмотрели public и private.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.


Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *