Модификатор доступа - это ключевое слово, которое определяет, кто может получить доступ к ресурсу или объекту в программе C #. Мы можем контролировать уровень доступа к классу, методу, переменным в программе с помощью модификатора доступа.

В C # есть шесть модификаторов доступа, которые имеют разные функции и предоставляют разные уровни доступа к объекту (классу / методу / переменной), с которым он используется.

Модификатор публичного доступа

Доступ к объектам (методам / свойствам) с модификаторами общего доступа можно получить из любой точки проекта. Для модификаторов общего доступа нет ограничения доступности.

using System;
namespace CSharp_Access_Modifiers
{
    class PublicMsg
    {
        // Accessible anywhere in program.
        public string msg = "This is public message."; 
    }

    class Program
    {
        static void Main()
        {
            var pMsg = new PublicMsg();
            Console.WriteLine(pMsg.msg);
        }
    }
}
Output:
This is public message.

В приведенной выше программе мы объявили переменную msg public и получили доступ из другого класса Program. Поскольку модификатор общего доступа не имеет ограничений по уровню доступа, к нему можно получить доступ из любого места в программе, то есть из другого класса, другой сборки / пространства имен.

Модификатор внутреннего доступа

К объектам с внутренними модификаторами доступа можно получить доступ из любого места в пределах одной сборки или пространств имен.

using System;
namespace CSharp_Access_Modifiers
{
    class InternalMsg
    {
        internal string msg = "This is internal message."; 
    }

    class Program
    {
        static void Main()
        {
            var interMsg = new InternalMsg();
            Console.WriteLine(interMsg.msg);
        }
    }
}
Output:
This is internal message.

Модификатор защищенного доступа

Модификатор защищенного доступа ограничивает доступность объектов в классе, в котором он создан, или в производном классе.

using System;
namespace CSharp_Access_Modifiers
{
    class ProtectedMsg
    {
        protected string msg = "This is protected message."; 
    }

    class Program:ProtectedMsg
    {
        static void Main()
        {
            var proMsg = new Program();
            // Accessible from derived class.
            Console.WriteLine(proMsg.msg); 
        }
    }
}
Output:
This is protected message.

В приведенном выше коде мы унаследовали класс Program от класса ProtectedMsg, и, поскольку переменная msg находится в пределах своего уровня доступа, мы получили результат.
К объекту с модификатором доступа protected также можно получить доступ из другой сборки из производного класса.

using System;
namespace CSharp_Access_Modifiers
{
     public class ProtectedMsg
    {
        protected  string msg = "This is protected  message.";
        static void Main()
        {
        }
    }
}

// Another Assembly
using CSharp_Access_Modifiers;
using System;
namespace AnotherAssembly
{
    class Program : ProtectedMsg
    {
        static void Main()
        {
            var anotherMsg = new Program();
            Console.WriteLine(anotherMsg.msg);
        }
    }
Output:
This is protected  message.

Модификатор частного доступа

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

using System;
namespace CSharp_Access_Modifiers
{
    class PrivateMsg
    {
        private string msg = "This is private message.";
        static void Main()
        {
            var prMsg = new PrivateMsg(); 
            //accessing the variable with in the class 
            Console.WriteLine(prMsg.msg);
        }
    }
}
Output:
This is private message.

Модификатор частного доступа имеет наименьший уровень доступа среди всех шести модификаторов доступа.

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

Модификатор защищенного внутреннего доступа

Доступ к объектам с защищенными модификаторами внутреннего доступа можно получить только внутри той же сборки или из производных классов из другой сборки.

using System;
namespace CSharp_Access_Modifiers
{
    public class ProtectedInternalMsg
    {
        protected internal string msg = "This is protected internal message.";
    }
}

// Another assembly 
using CSharp_Access_Modifiers;
using System;
namespace AnotherAssembly
{
    class Program : ProtectedInternalMsg
    {
        static void Main()
        {
            var anotherMsg = new Program();
            // Accessible from derived class in another assembly
            Console.WriteLine(anotherMsg.msg); 
        }
    }
}
Output:
This is protected internal message.

Модификатор частного защищенного доступа

Доступ к объектам с модификаторами частного защищенного доступа можно получить только из того же класса или производного класса.

using System;
namespace CSharp_Access_Modifiers
{
    class PrivateProtectedMsg
    {
        private protected  string msg = 
"This is private protected  message.";
    }
    class Program:PrivateProtectedMsg
    {
        static void Main()
        {
            var prproMsg = new Program();
            // accessible from base class or derived class only.
            Console.WriteLine(prproMsg.msg); 
        }
    }
}
Output:
This is private protected  message.

Модификатор доступа Private Protected позволяет получить доступ к объекту из производного класса в той же сборке. В приведенном выше коде доступ к переменной msg осуществляется из класса Program, производного от класса PrivateProtectedMsg.

Модификатор доступа по умолчанию

Если модификатор доступа не установлен, будет использоваться модификатор доступа по умолчанию. Модификатор доступа по умолчанию отличается для

Модификатор доступа по умолчанию для namespace, enum, interface - public, и их модификатор доступа нельзя изменить или установить. Уровень доступа по умолчанию для класса, структуры, метода, переменной - частный.

Вот сводка уровня доступности модификатора доступа в C #:

Итак, это все о модификаторах доступа в C #.