С помощью модификаторов доступа можно ограничить доступ к типу или отдельному его члену из других типов и сборок. Модификатор добавляется к объявлению типа или его члена.
Всего доступно пять модификаторов доступа:
- public— полный доступ. Это значение по умолчанию для членов- enumи интерфейсов.
- internal— доступ только в пределах сборки или дружеских сборок. Это значение по умолчанию для не вложенных типов.
- private— доступ только в пределах типа. Это значение по умолчанию для членов класса или структуры.
- protected— доступ только в пределах типа и производных классов.
- protected internal— симбиоз- protectedи- internal. Расширяет оба модификатора и делает тип или его член доступным в пределах типа, производных классов, сборки и дружеских сборок.
| 1 2 3 4 | class Class1 {} // Class1 - internal (по умолчанию) public class Class2 {} class ClassA { int x; } // x - private (по умолчанию) class ClassB { internal int x; } | 
Дружественные сборки (Friend Assemblies)
Дружественная сборка — сборка, которая может обращаться к internal типам и членам другой сборки. Если сборка определена как дружественная, больше нет необходимости помечать типы и члены как public для того, чтобы другие сборки имели к ним доступ. Только сборки, которые явным образом указаны как дружественные, могут обращаться к internal типам и членам. Указать дружеские сборки можно с помощью атрибута System.Runtime.CompilerServices.InternalsVisibleTo:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | using System.Runtime.CompilerServices; using System; [assembly: InternalsVisibleTo("AssemblyB")]  class FriendClass {     public void Test()     {         Console.WriteLine("Sample Class");     } } public class ClassWithFriendMethod {     internal void Test()     {         Console.WriteLine("Sample Method");     } } | 
Ограничение доступа (Accessibility Capping)
Типы ограничивают доступ своих членов. Например:
| 1 | class C { public void Foo() {} } | 
 Класс С по умолчанию имеет доступ internal и он ограничивает доступ своего метода Foo, делая его тоже internal несмотря на то, что для Foo явно задан доступ public.

