loading experience

C#

C# 14: gli extension members spiegati con esempi

Dopo i metodi di estensione arrivano proprietà e membri statici di estensione, raccolti in blocchi extension.

C# 14: gli extension members spiegati con esempi

I metodi di estensione esistono da C# 3, ma permettevano di aggiungere solo metodi. C# 14 introduce i blocchi extension, che consentono di definire anche proprietà di estensione e membri statici di estensione su un tipo esistente.

Un blocco extension raggruppa tutti i membri che estendono lo stesso tipo.
Un blocco extension raggruppa tutti i membri che estendono lo stesso tipo.

La nuova sintassi

All'interno di una classe statica si dichiara un blocco extension con il "ricevitore", cioè il tipo esteso. Tutti i membri del blocco possono usare quel ricevitore.

public static class StringExtensions
{
    extension(string text)
    {
        // proprietà di estensione
        public bool IsBlank => string.IsNullOrWhiteSpace(text);

        // metodo di estensione, come prima ma senza "this"
        public string Truncate(int max) =>
            text.Length <= max ? text : text[..max] + "...";
    }
}

var title = "Introduzione a .NET 10";
Console.WriteLine(title.IsBlank);       // False
Console.WriteLine(title.Truncate(12));  // Introduzione...

Membri statici di estensione

Omettendo il nome del parametro si estende il tipo stesso, non un'istanza: è possibile aggiungere metodi o proprietà "statiche" a un tipo che non controlli.

public static class GuidExtensions
{
    extension(Guid)
    {
        public static Guid FromText(string value) =>
            Guid.TryParse(value, out var g) ? g : Guid.Empty;
    }
}

var id = Guid.FromText("non-valido"); // Guid.Empty

Compatibilità

I vecchi metodi di estensione con this continuano a funzionare e possono convivere con i nuovi blocchi. Non serve riscrivere nulla: si adottano i blocchi extension quando servono proprietà o membri statici, o quando si vogliono raggruppare più estensioni dello stesso tipo.

Consigli

  • Usa le proprietà di estensione per informazioni derivate e senza effetti collaterali.
  • Evita di "riempire" tipi di sistema con decine di estensioni: preferisci namespace dedicati.
  • Ricorda che un membro dell'istanza ha sempre la precedenza su un'estensione con lo stesso nome.
Commenti (0)

Nessun commento ancora.

Lascia un commento