Выбор ответа Middle ООП в C# обновлено

Явная реализация интерфейса

Вопрос

Класс реализует void ILogger.Log(string m) явно. Как вызвать этот метод у var x = new FileLogger();?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: ((ILogger)x).Log("m"). Явно реализованный член не виден через переменную типа класса, только через ссылку на интерфейс.

Варианты ответа

  1. ((ILogger)x).Log("m")правильный ответ
  2. x.Log("m")
  3. x.ILogger.Log("m")
  4. Никак, явная реализация доступна только внутри класса

Разбор

Явно реализованный член не виден через переменную типа класса, только через ссылку на интерфейс. Поэтому нужно привести x к ILogger. x.Log не скомпилируется, синтаксиса x.ILogger.Log нет. Явная реализация нужна, когда два интерфейса требуют методы с одинаковой сигнатурой или чтобы спрятать член из публичного API класса.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме