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.
Sfida
FacileCostruiamo 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 classeCalculatornello spazio dei nomiMathToolscon metodi in overload che condividono lo stesso nome ma accettano parametri diversi:Multiply- crea tre versioni in overload:- Una che accetta due parametri
inte restituisce il loro prodotto comeint - Una che accetta tre parametri
inte restituisce il loro prodotto comeint - Una che accetta due parametri
doublee restituisce il loro prodotto comedouble
- Una che accetta due parametri
Describe- crea due versioni in overload:- Una che accetta un
inte restituisce"Integer: {value}" - Una che accetta un
doublee restituisce"Double: {value}"
- Una che accetta un
Program.cs: nel tuo file principale, crea un’istanza diCalculatore 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:
- Moltiplica i primi due interi (usa la versione con due
int) - Moltiplica tutti e tre gli interi (usa la versione con tre
int) - Moltiplica il primo intero per il numero decimale (usa la versione con due
double) - Descrivi il primo intero (usa la versione con
int) - 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.5Nota 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
}
}
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
1Fondamenti della programmazione orientata agli oggetti
File esterniNamespace e direttiveIntroduzione a classi e oggettiLa parola chiave "this"Metodi e parametriCampi e proprietàCostruttoriInizializzatori di oggettiRiepilogo - Calcolatrice semplice4Ereditarietà
Sintassi di base dell'ereditarietà (:)La parola chiave 'base'Parole chiave virtual e overrideClassi sealedLa classe base 'object'Riepilogo - Gerarchia dei dipendenti7Funzionalità avanzate
Sovraccarico degli operatoriIndicizzatori (this[])Override di ToString()Metodi di estensioneRiepilogo - Lista personalizzata10Pattern di progettazione Parte 1
Introduzione ai pattern di progettazioneSingleton thread-safePattern FactoryPattern Observer (eventi)Pattern Strategy2Proprietà e membri statici
Proprietà implementate automaticamenteProprietà di sola lettura e di sola scritturaCampi e metodi staticiClassi staticheMembri con corpo di espressione5Polimorfismo e interfacce
Polimorfismo a compile time e runtimeInterfaccia o classe astrattaInterfacce multipleInterfacce espliciteUpcasting e downcastingRipasso: calcolatore di forme8Concetti avanzati di programmazione a oggetti
Composizione invece dell'ereditarietàTipi generici (classi e metodi)Delegati ed eventiAttributi e reflectionIDisposable e istruzione usingNozioni di base sull'iniezione delle dipendenze11Pattern di progettazione, parte 2
Pattern del ComandoPattern dell’AdattatorePattern del DecoratorePattern Template MethodPattern dello StatoPattern Composito3Architettura delle classi
Dati di istanza vs staticiParole chiave 'readonly' e 'const'Campi di supportoRiepilogo - Gestore di conti bancari6Incapsulamento
Modificatori di accessoProprietà per l'incapsulamentoImplementazione dell'occultamento dei datiModelli di immutabilitàRiepilogo - Registri degli studenti9Argomenti variabili
La parola chiave 'params'Parametri opzionaliArgomenti con nomeOverloading dei metodiEsercitati da solo: Compilatore C# online