Для организации областей видимости как методов и полей классов так и самих классов человечество придумало ключивые слова или модификаторы доступа.
Немного документации почитать
Access Modifiers (C# Reference)
Accessibility Levels (C# Reference)
Access Modifiers (C# Programming Guide)
Restrictions on using accessibility levels (C# Reference)
Нет ограничений на доступ к члену класса.
Доступ ограничен классом в котором объявлен член и классами наслеждниками.
Доступ ограничен текущей сборкой.
Доступ можно получить в пределах текущей сборки, текущего класса или классов наследников.
Тоступ только в пределах класса в котором объявлен метод, поле и т.п.
Аналогично Java, конструкция типа
private class
не имеет смысла.
Доступ возможен только из класса или наследников но только в пределах текущей сборки.
Область видимости ограницена текущим файлом.
широко используется для source generators
По умолчанию членам класса будет назначена приватная обсласть видимости, классу в пространстве имен - internal
Имеет public
по умолчанию и мы не можем это изменить.
Все что находится внутри namespaces
может иметь public
или internal
модификатор. По умолчанию - internal
.
Enum - по умолчанию имеет public
тип.
Класс может иметь public
или internal
модификатор. По умолчанию - internal
.
Члены класса по умолчанию имеют private
тип доступа но мы можем задать любой другой.
В структуре все типы по умолчанию private
но могут иметь public
, internal
или private
.
Члены в интерфейсе по умолчанию public
и не могут быть переопределены.
Члены в enumeration по умолчанию public
и не могут быть переопределены.
Controlling Access to Members of a Class
Член класса помеченный как public будет доступен всем.
Ограничение области видимости до класса в котором объявлем метод, поле, вложенный класс.
Мы можем определить класс как private но смысла в это не много и такой код не будет скомпилирован. Но мы можем использовать
private class
для вложенных классов.
Доступность в пределах класса и классов наследников. Также доступность в классав находящихся в том же пакете.
По умолчанию (без указания мождификатора доступа) область видимости ограницена пакетом и методы и поля видны в пределах всего пакета (package-private).