Una delle principali novità di C# 8, è la possibilità di definire l’implementazione dei metodi direttamente nelle interfacce.
Lo scenario più comune per cui è stata prevista questa possibilità è quello di aggiungere membri a interfacce già rilasciate, e quindi già utilizzate, evitando quindi di “rompere” applicazioni già distribuite.
Supponiamo di avere un’interfaccia come la seguente:
interface IDocument { void Print(); }
E una classe che la implementa:
class Report : IDocument { public void Print() { Console.WriteLine("Print"); } }
Se ora fosse necessario implementare una funzionalità di salvataggio, la procedura più naturale sarebbe di evolvere l’interfaccia, aggiungendo ad essa un nuovo membro, per esempio un metodo Save:
interface IDocument { void Print(); void Save(string path); }
La classe Report provocherebbe però un errore di compilazione di tipo ‘Report’ does not implement interface member ‘IDocument.Save(string)’, in quanto non implementa più correttamente l’interfaccia.
C# 8 permette invece di implementare il membro direttamente nell’interfaccia scrivendone un corpo predefinito:
interface IDocument { void Print(); void Save(string path) { Console.WriteLine($"IDocument.Save({path})"); } }
C# 8 permette di specificare anche dei modificatori di accesso per i membri di un’interfaccia, che nelle versioni precedenti erano implicitamente public.
Questo e ulteriori dettagli sulle novità di C# 8…
nella prossima edizione Programmare con C# 8 – Guida Completa, presto in libreria.