Выбор ответа Middle ООП в C# обновлено
Явная реализация интерфейса
Вопрос
Класс реализует void ILogger.Log(string m) явно. Как вызвать этот метод у var x = new FileLogger();?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: ((ILogger)x).Log("m"). Явно реализованный член не виден через переменную типа класса, только через ссылку на интерфейс.
Варианты ответа
((ILogger)x).Log("m")правильный ответx.Log("m")x.ILogger.Log("m")- Никак, явная реализация доступна только внутри класса
Разбор
Явно реализованный член не виден через переменную типа класса, только через ссылку на интерфейс. Поэтому нужно привести x к ILogger. x.Log не скомпилируется, синтаксиса x.ILogger.Log нет. Явная реализация нужна, когда два интерфейса требуют методы с одинаковой сигнатурой или чтобы спрятать член из публичного API класса.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Методы интерфейса по умолчанию
Следующий вопрос
Банковские счета: инкапсуляция и инварианты
Термины по теме
Ещё по теме «ООП в C#»
- Абстрактный класс или интерфейс
- protected internal и private protected
- Фигуры: полиморфная площадь
- Чем new отличается от override
- new и override при вызове через базовый тип
- Порядок инициализации при создании наследника
- Порядок статических и обычных конструкторов
- Статическое поле общее для всех объектов