C# 8: implementazione di metodi predefiniti nelle interfacce

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.