Interfaces : méthodes par défaut

Depuis C# 8, les interfaces peuvent contenir des implémentations par défaut pour des membres. Cela permet d'évoluer une interface sans casser les implémenteurs existants.

Cas d’usage

Faire évoluer une interface sans casser les consommateurs

Ajouter une méthode nouvelle avec une implémentation par défaut pour éviter de forcer la mise à jour des implémenteurs existants.

public interface ILogger
{
    void Log(string message);

    // nouvelle API avec implémentation par défaut
    void LogDebug(string message) => Log($"DEBUG: {message}");
}

public class ConsoleLogger : ILogger
{
    public void Log(string message) => Console.WriteLine(message);
}

// ConsoleLogger hérite automatiquement du comportement de LogDebug.
Fournir une logique utilitaire partagée

Implémenter de petits helpers réutilisables au plus près du contrat tout en gardant les implémentations concrètes simples.

public interface ISerializer
{
    string Serialize(object o);

    // helper utilisant la méthode principale
    string SerializePretty(object o) => JsonSerializer.Serialize(o, new JsonSerializerOptions { WriteIndented = true });
}

public class MySerializer : ISerializer
{
    public string Serialize(object o) => JsonSerializer.Serialize(o);
}

// MySerializer bénéficie de SerializePretty gratuitement.

Résumé

Les implémentations par défaut (DIM) aident à faire évoluer les API et à partager de petits helpers. À utiliser avec parcimonie pour ne pas complexifier la polymorphie.

Avantages
  • Permet l'évolution non‑cassante des API
  • Partage de petits détails d'implémentation entre types
Inconvénients
  • Peut créer des ambiguïtés dans des scénarios d'héritage complexes
  • Peut cacher du comportement loin des types concrets (surprise pour les implémenteurs)

Bonnes pratiques

  • Privilégier des implémentations par défaut courtes et stables; éviter la logique lourde.
  • Documenter quand une méthode par défaut dépend d'autres membres de l'interface.
  • Préférer les méthodes d'extension ou les classes abstraites si l'implémentation devient volumineuse ou avec état.
SourceÉcrit le 2025-09-07