День сто тридцать второй. #ВопросыНаСобеседовании
Самые часто задаваемые вопросы на собеседовании по C#
16. Что такое модификаторы доступа в C#?
Модификаторы доступа в C# используются для определения области доступности класса или его членов. Например, открытый класс доступен всем без каких-либо ограничений, тогда как внутренний класс может быть доступен только внутри сборки.
Модификаторы доступа являются неотъемлемой частью объектно-ориентированного программирования, используются для реализации инкапсуляции и позволяют вам определить, кто имеет, а кто не имеет доступа к определенным функциям.
Модификаторы доступа в С#:
1.
2.
3.
4.
5.
6.
Особенности:
- Классы, структуры, интерфейсы и делегаты могут быть public или internal (по умолчанию).
- Члены класса, включая вложенные классы и структуры, могут иметь все возможные модификаторы доступа (по умолчанию private). Обычно доступность члена не превышает доступность типа, который его содержит. Однако открытый член внутреннего класса может быть доступен извне сборки, если он реализует методы интерфейса или переопределяет виртуальные методы, определенные в общедоступном базовом классе.
- Члены структуры, включая вложенные классы и структуры, могут быть объявлены как public, internal или private. Члены структуры не могут быть protected, потому что структуры не поддерживают наследование.
- Члены интерфейсов и перечислений всегда public. Модификаторы доступа к ним не применяются.
- Тип любого поля, свойства или события должен быть, как минимум, таким же доступным, как и сам член. Аналогично, тип возвращаемого значения и типы параметров любого метода, индексатора или делегата, должны быть, как минимум, такими же доступными, как и сам член. Т.е вы не можете иметь public метод M, который возвращает класс C, если C не public. Или вы не можете иметь protected свойство типа A, если тип A private.
- Производные классы не могут иметь большей доступности, чем их базовые типы. Т.е. не может быть public класса B, производного от internal класса A.
- Финализаторы не могут иметь модификаторов доступа.
- Пользовательские операторы всегда должны быть объявлены как public.
Замечание: Вы можете разрешить другим сборкам доступ к вашим внутренним типам с помощью атрибута
Источники:
- https://www.c-sharpcorner.com
- https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers
Самые часто задаваемые вопросы на собеседовании по C#
16. Что такое модификаторы доступа в C#?
Модификаторы доступа в C# используются для определения области доступности класса или его членов. Например, открытый класс доступен всем без каких-либо ограничений, тогда как внутренний класс может быть доступен только внутри сборки.
Модификаторы доступа являются неотъемлемой частью объектно-ориентированного программирования, используются для реализации инкапсуляции и позволяют вам определить, кто имеет, а кто не имеет доступа к определенным функциям.
Модификаторы доступа в С#:
1.
public
- доступ к типу или члену может быть получен из любого другого кода в той же сборке или другой сборке, которая на него ссылается.2.
private
- тип или член могут быть доступны только из кода в том же классе или структуре.3.
protected
- доступ к типу или члену возможен только из кода в том же классе или в классе, производном от него.4.
internal
- доступ к типу или члену возможен из любого кода в той же сборке, но не из другой сборки.5.
protected internal
– доступ к типу или члену возможен из любого кода в сборке, в которой он объявлен, или из производного от этого класса в другой сборке.6.
private protected
(с C#7.2) - доступ к типу или члену возможен только в пределах его сборки, и из кода в том же классе или в классе, производном от него.Особенности:
- Классы, структуры, интерфейсы и делегаты могут быть public или internal (по умолчанию).
- Члены класса, включая вложенные классы и структуры, могут иметь все возможные модификаторы доступа (по умолчанию private). Обычно доступность члена не превышает доступность типа, который его содержит. Однако открытый член внутреннего класса может быть доступен извне сборки, если он реализует методы интерфейса или переопределяет виртуальные методы, определенные в общедоступном базовом классе.
- Члены структуры, включая вложенные классы и структуры, могут быть объявлены как public, internal или private. Члены структуры не могут быть protected, потому что структуры не поддерживают наследование.
- Члены интерфейсов и перечислений всегда public. Модификаторы доступа к ним не применяются.
- Тип любого поля, свойства или события должен быть, как минимум, таким же доступным, как и сам член. Аналогично, тип возвращаемого значения и типы параметров любого метода, индексатора или делегата, должны быть, как минимум, такими же доступными, как и сам член. Т.е вы не можете иметь public метод M, который возвращает класс C, если C не public. Или вы не можете иметь protected свойство типа A, если тип A private.
- Производные классы не могут иметь большей доступности, чем их базовые типы. Т.е. не может быть public класса B, производного от internal класса A.
- Финализаторы не могут иметь модификаторов доступа.
- Пользовательские операторы всегда должны быть объявлены как public.
Замечание: Вы можете разрешить другим сборкам доступ к вашим внутренним типам с помощью атрибута
InternalsVisibleToAttribute
.Источники:
- https://www.c-sharpcorner.com
- https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers