Menu
Coddy logo textTech

Overloading dei metodi

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

L'overload dei metodi ti consente di definire più metodi con lo stesso nome ma con elenchi di parametri diversi. Il compilatore determina quale versione chiamare in base agli argomenti che fornisci.

Ogni metodo sovraccaricato deve avere una firma univoca: un numero diverso di parametri oppure tipi di parametri diversi:

public static void Print(string message)
{
    Console.WriteLine(message);
}

public static void Print(string message, int times)
{
    for (int i = 0; i < times; i++)
        Console.WriteLine(message);
}

public static void Print(int number)
{
    Console.WriteLine(number);
}
// Il compilatore sceglie la versione corretta
Print("Hello");           // Chiama Print(string)
Print("Hi", 3);           // Chiama Print(string, int)
Print(42);                // Chiama Print(int)

L'overloading si differenzia dai parametri opzionali in un aspetto importante. Con i parametri opzionali, hai un unico metodo che gestisce diversi scenari. Con l'overloading, hai metodi separati che possono contenere logiche completamente diverse per ogni caso.

Nota che il solo tipo restituito non rende univoci i metodi: non puoi avere due metodi che differiscono solo per ciò che restituiscono. L’elenco dei parametri deve essere diverso. L’overloading dei metodi è una forma di polimorfismo in fase di compilazione, in cui la decisione su quale metodo chiamare viene presa quando il codice viene compilato, non quando viene eseguito.

challenge icon

Sfida

Facile

Costruiamo una versatile classe calcolatrice che dimostra la potenza dell’overload dei metodi. Creerai più versioni dei metodi di calcolo che gestiscono scenari diversi, dalle semplici operazioni con due numeri ai calcoli più complessi, tutte con gli stessi nomi intuitivi.

Organizzerai il codice in due file:

  • Calculator.cs: crea una classe Calculator nello spazio dei nomi MathTools con metodi in overload che condividono lo stesso nome ma accettano parametri diversi:
    • Multiply - crea tre versioni in overload:
      • Una che accetta due parametri int e restituisce il loro prodotto come int
      • Una che accetta tre parametri int e restituisce il loro prodotto come int
      • Una che accetta due parametri double e restituisce il loro prodotto come double
    • Describe - crea due versioni in overload:
      • Una che accetta un int e restituisce "Integer: {value}"
      • Una che accetta un double e restituisce "Double: {value}"
  • Program.cs: nel tuo file principale, crea un’istanza di Calculator e mostra come il compilatore seleziona automaticamente il metodo in overload corretto in base agli argomenti che fornisci.

Riceverai quattro valori in input:

  • Primo intero (ad es. 5)
  • Secondo intero (ad es. 4)
  • Terzo intero (ad es. 3)
  • Un numero decimale (ad es. 2.5)

Usando la tua calcolatrice, esegui queste operazioni e stampa ogni risultato su una riga distinta:

  1. Moltiplica i primi due interi (usa la versione con due int)
  2. Moltiplica tutti e tre gli interi (usa la versione con tre int)
  3. Moltiplica il primo intero per il numero decimale (usa la versione con due double)
  4. Descrivi il primo intero (usa la versione con int)
  5. Descrivi il numero decimale (usa la versione con double)

Ad esempio, se i valori in input sono 5, 4, 3 e 2.5, l’output dovrebbe essere:

20
60
12.5
Integer: 5
Double: 2.5

Nota come chiami Multiply e Describe con argomenti di tipi e quantità diversi, eppure il compilatore sa esattamente quale versione usare ogni volta. Questa è la polimorfia a tempo di compilazione in azione: la decisione viene presa quando il codice viene compilato, non quando viene eseguito!

Provalo tu

using System;
using MathTools;

class Program
{
    public static void Main(string[] args)
    {
        // Leggi gli input
        int firstInt = Convert.ToInt32(Console.ReadLine());
        int secondInt = Convert.ToInt32(Console.ReadLine());
        int thirdInt = Convert.ToInt32(Console.ReadLine());
        double decimalNum = Convert.ToDouble(Console.ReadLine());

        // TODO: Crea un'istanza di Calculator

        // TODO: Chiama Multiply con due numeri interi e stampa il risultato

        // TODO: Chiama Multiply con tre numeri interi e stampa il risultato

        // TODO: Chiama Multiply con il primo numero intero e il numero decimale, poi stampa il risultato

        // TODO: Chiama Describe con il primo numero intero e stampa il risultato

        // TODO: Chiama Describe con il numero decimale e stampa il risultato
    }
}
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