Search
Write a publication
Pull to refresh

Comments 6

Но ведь вы и раньше могли объявить абстрактный класс AbstractFileHandler, где метод Rename был бы реализован, а остальные методы объявлены как abstract.
В сущности тоже самое, просто проще синтаксис. Вохможно в заблуждение вводит именно то, что это интерфейс и не приходит в голову, что что-то может быть реализовано.

Кстати, второе ваше замечание (по поводу произовдительности) можно применить и к extension-методам. Например:


static T GetElementAt<T>(this IReader<T> reader, int index) => 
  reader.GetItems().ElementAt(index);

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

Точно так же Вы можете использовать свой собственный метод-раширение, никакой разницы.
UFO landed and left these words here
1. Предполагалось что расширять их будут за счет вызова других интерфейсных методов:
interface ILogger
{
    void Log(LogLevel level, string message);
    void Log(Exception ex) => Log(LogLevel.Error, ex.ToString());
}

, а неопытный кодер и помимо этого найдет много способов всё сломать.

2. Для вызова реализации по-умолчанию всё равно надо код менять, т.е. само по себе ничего не сломается, а если хотите эту реализацию использовать — посмотрите и потестите как она работает.

3. А вот без этого механизма как раз могло всё сломаться, как на этапе компиляции, так и во время выполнения при прилетевшем пакете с измененным интерфейсом. Тоже никто не запрещал так делать, и жили с этим :)
Sign up to leave a comment.