День шестьдесят девятый. #CSharp8

Новые функции в C# 8.

1. Реализация по Умолчанию Интерфейсных Методов

Эта функция помогает вам добавлять функциональность к интерфейсам ваших библиотек, при этом поддерживая обратную совместимость с кодом, написанным для предыдущих версий этих интерфейсов.

Сейчас после того, как вы опубликовали интерфейс, «игра окончена». Вы не можете добавлять члены к интерфейсу без того, чтобы сломать все существующие его реализации.

C# 8.0 позволяет вам предоставить тело члена интерфейса. Поэтому, если кто-то не реализует этот член (возможно, потому что его ещё не существовало на момент написания кода), они просто будут использовать реализацию по умолчанию.

interface ILogger

{

void Log(LogLevel level, string message);

// Новый перегруженный метод

void Log(Exception ex) => Log(LogLevel.Error, ex.ToString());

}

class ConsoleLogger : ILogger

{

public void Log(LogLevel level, string message) { ... }

// Метод Log(Exception) получает реализацию по умолчанию

}

Класс ConsoleLogger не имеет реализации перегруженного метода Log(Exception) интерфейса ILogger, поскольку был объявлен до внесения изменений в интерфейс. Теперь вы можете безопасно добавлять новые члены в существующие публичные интерфейсы, если вы предоставляете реализацию по умолчанию для уже существующих реализаторов.

Преимущества

Вы можете добавлять функциональность к интерфейсам, не нарушая совместимость с предыдущими версиями этих интерфейсов.

Недостатки

Это нужно использовать с осторожностью. В противном случае можно легко нарушить принципы единственной ответственности. Подумайте, прежде чем использовать этот инструмент, нет ли другого, более элегантного решения вашей проблемы.



Источник: https://www.c-sharpcorner.com/article/c-sharp-8-features/