Skip to main content

C# vs Java. Модификаторы доступа

· 2 min read
Andrey Ganyushkin

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

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

Немного документации почитать

Access Modifiers (C# Reference)

Accessibility Levels (C# Reference)

Access Modifiers (C# Programming Guide)

Restrictions on using accessibility levels (C# Reference)

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

public

Нет ограничений на доступ к члену класса.

protected

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

internal

Доступ ограничен текущей сборкой.

protected internal

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

private

Тоступ только в пределах класса в котором объявлен метод, поле и т.п.

Аналогично Java, конструкция типа private class не имеет смысла.

private protected

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

file

Область видимости ограницена текущим файлом.

широко используется для source generators

default

По умолчанию членам класса будет назначена приватная обсласть видимости, классу в пространстве имен - internal

Типы данных и модификаторы доступа

namespaces

Имеет public по умолчанию и мы не можем это изменить.

Все что находится внутри namespaces может иметь public или internal модификатор. По умолчанию - internal.

Enum - по умолчанию имеет public тип.

class & class members

Класс может иметь public или internal модификатор. По умолчанию - internal.

Члены класса по умолчанию имеют private тип доступа но мы можем задать любой другой.

struct

В структуре все типы по умолчанию private но могут иметь public, internal или private.

interface

Члены в интерфейсе по умолчанию public и не могут быть переопределены.

enumeration

Члены в enumeration по умолчанию public и не могут быть переопределены.

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

Controlling Access to Members of a Class

public

Член класса помеченный как public будет доступен всем.

private

Ограничение области видимости до класса в котором объявлем метод, поле, вложенный класс.

Мы можем определить класс как private но смысла в это не много и такой код не будет скомпилирован. Но мы можем использовать private class для вложенных классов.

protected

Доступность в пределах класса и классов наследников. Также доступность в классав находящихся в том же пакете.

default (package-private)

По умолчанию (без указания мождификатора доступа) область видимости ограницена пакетом и методы и поля видны в пределах всего пакета (package-private).