Menu
Coddy logo textTech

Metodi di estensione

Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 39 di 70.

I metodi di estensione ti permettono di aggiungere nuovi metodi ai tipi esistenti senza modificarne il codice sorgente né creare classi derivate. Appaiono come se fossero metodi nativi del tipo, rendendo il tuo codice più leggibile e intuitivo.

Per creare un metodo di estensione, definisci un metodo statico in una classe statica, con il primo parametro preceduto dalla parola chiave this:

public static class StringExtensions
{
    public static int WordCount(this string str)
    {
        return str.Split(' ').Length;
    }
}

Ora puoi chiamare questo metodo direttamente su qualsiasi stringa:

string sentence = "Hello World Today";
int count = sentence.WordCount();  // 3

Il parametro this string str indica al compilatore che questo metodo estende il tipo string. Quando chiami sentence.WordCount(), il compilatore lo traduce dietro le quinte in StringExtensions.WordCount(sentence).

I metodi di estensione possono anche accettare parametri aggiuntivi:

public static bool IsLongerThan(this string str, int length)
{
    return str.Length > length;
}

// Utilizzo
bool result = "Hello".IsLongerThan(3);  // true

Questa tecnica è usata ampiamente in LINQ, dove metodi come Where() e Select() sono metodi di estensione di IEnumerable. I metodi di estensione sono potenti per aggiungere funzioni di utilità a tipi che non controlli, mantenendo il tuo codice pulito ed espressivo.

challenge icon

Sfida

Facile

Creiamo un insieme di metodi di estensione utili per gli interi, che aggiungono funzionalità comode che ti aspetteresti di trovare integrate. Creerai una classe statica contenente metodi di estensione che possono essere chiamati direttamente su qualsiasi intero, rendendo il tuo codice più espressivo e leggibile.

Organizzerai il codice in due file:

  • IntExtensions.cs: crea una classe statica chiamata IntExtensions nello spazio dei nomi Utilities. Questa classe conterrà metodi di estensione che arricchiscono il tipo int:
    • IsEven() - restituisce true se il numero è pari, altrimenti false
    • Square() - restituisce il numero moltiplicato per sé stesso
    • IsInRange(int min, int max) - restituisce true se il numero è compreso tra min e max (inclusi), altrimenti false
    Ricorda che i metodi di estensione devono essere metodi statici in una classe statica; il primo parametro deve usare la parola chiave this per specificare il tipo che stai estendendo.
  • Program.cs: nel file principale, leggi un intero dall'input e dimostra tutti e tre i metodi di estensione. Chiama ogni metodo direttamente sull'intero, come se fosse un metodo integrato, poi stampa i risultati.

Riceverai tre valori in input:

  • Un numero da verificare (intero)
  • Il valore minimo per il controllo dell'intervallo (intero)
  • Il valore massimo per il controllo dell'intervallo (intero)

Stampa l'output in questo formato:

Is {number} even? {True/False}
Square of {number}: {result}
Is {number} in range [{min}-{max}]? {True/False}

Per esempio, se i valori in input sono 7, 5 e 10, l'output dovrebbe essere:

Is 7 even? False
Square of 7: 49
Is 7 in range [5-10]? True

Nota quanto è naturale scrivere number.IsEven() e number.Square(): i metodi di estensione sembrano far parte da sempre del tipo intero!

Provalo tu

using System;
using Utilities;

class Program
{
    public static void Main(string[] args)
    {
        // Leggi i valori di input
        int number = Convert.ToInt32(Console.ReadLine());
        int min = Convert.ToInt32(Console.ReadLine());
        int max = Convert.ToInt32(Console.ReadLine());

        // TODO: Usa i metodi di estensione su 'number' e stampa i risultati
        // Chiama number.IsEven(), number.Square() e number.IsInRange(min, max)
        // Stampa nel seguente formato:
        // {number} è pari? {True/False}
        // Quadrato di {number}: {result}
        // {number} è nell'intervallo [{min}-{max}]? {True/False}

    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C# online