Явная реализация интерфеса без необходимости
От: Pek2014 Россия  
Дата: 24.03.17 16:24
Оценка:
Ситуация: Класс A предназначен для использования другим (другими) классом
B (классами) через внедрение зависимости. Т.е. класс-клиент B будет иметь
переменную (поле) типа интерфейс IA и вызывать класс A, только через интерфейс.

Вопрос: Стоит ли использовать при определении класса А явную реализацию
методов интерфейса IA?

public interface IA
{
    void Do();
}

public class A : IA
{
    void IA.Do() {}
    
    // Реализация IA.Do()
    public void Do() {}
}

public class B 
{
    public B(IA a)
    {
        _a = a;
    }

    void Do()    
    {
        _a.Do();
    }
    private IA _a;
}


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

1. Выразительность синтаксиса.

Отпадает необходимость комментировать определение
метода как метода необходимого для реализации интерфейса. Теперь эта мысль
выражается средствами языка. Плюс — не надо (и не получится) писать "public"
для этого метода. Ясно и так, что метод интерфейса публичный... Код становится
более кратким и более понятным.

2. Лучшая диагностика проблем.

Если вы ошиблись в сигнатуре метода, то при неявной реализации, компилятор и решарпер
вам скажут, что интерфейс и нужный ему метод не нерализован. Но они не укажут
пальцем на метод, в сигнатуре которого вы ошиблись. В случае явной реализации —
всё сразу понятно, где ошибка, с какой строчке. И решарпер поможет написать правильно.

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

Вопрос: удержаться и сделать неявную реализацию? Что посоветуете?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.