Выбор ответа Junior Функции, расширения и scope-функции обновлено
Доступ расширений к private
Вопрос
Есть ли у функции расширения доступ к private полям класса, который она расширяет?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Нет, это внешняя функция, ей видны только доступные снаружи члены. Расширение не меняет класс, оно компилируется в статическую функцию с объектом в первом параметре.
Варианты ответа
- Да, расширение становится частью класса при компиляции
- Нет, это внешняя функция, ей видны только доступные снаружи членыправильный ответ
- Да, если расширение объявлено в том же пакете, что и класс
- Только если класс помечен
openи неfinal
Разбор
Расширение не меняет класс, оно компилируется в статическую функцию с объектом в первом параметре. Поэтому видит то же, что видел бы любой внешний код: public и internal (в том же модуле). Исключение: расширение, объявленное внутри самого класса, видит его приватные члены, как любой другой член.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.