Comments 6
Но ведь вы и раньше могли объявить абстрактный класс AbstractFileHandler, где метод Rename был бы реализован, а остальные методы объявлены как abstract.
В сущности тоже самое, просто проще синтаксис. Вохможно в заблуждение вводит именно то, что это интерфейс и не приходит в голову, что что-то может быть реализовано.
В сущности тоже самое, просто проще синтаксис. Вохможно в заблуждение вводит именно то, что это интерфейс и не приходит в голову, что что-то может быть реализовано.
Кстати, второе ваше замечание (по поводу произовдительности) можно применить и к extension-методам. Например:
static T GetElementAt<T>(this IReader<T> reader, int index) =>
reader.GetItems().ElementAt(index);
Но реализации по-умолчанию в интерфейсах хотя бы позволяют переопределить такое поведение в непосредственном классе-реализации.
Код в картинках!
1. Предполагалось что расширять их будут за счет вызова других интерфейсных методов:
, а неопытный кодер и помимо этого найдет много способов всё сломать.
2. Для вызова реализации по-умолчанию всё равно надо код менять, т.е. само по себе ничего не сломается, а если хотите эту реализацию использовать — посмотрите и потестите как она работает.
3. А вот без этого механизма как раз могло всё сломаться, как на этапе компиляции, так и во время выполнения при прилетевшем пакете с измененным интерфейсом. Тоже никто не запрещал так делать, и жили с этим :)
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.
Интерфейсы в C# 8: опасные допущения при реализации по умолчанию