Overloading Dei Metodi
Il sovraccarico dei metodi in C# consente di definire più metodi con lo stesso nome all'interno di una classe, ciascuno differente per tipo o numero di parametri, o entrambi, offrendo un modo più ordinato e adattabile per gestire diversi scenari di input.
Ad esempio, è possibile avere due metodi con lo stesso nome ma un numero diverso di parametri:
index.cs
12345678910111213141516171819using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static int sum(int a, int b, int c) { return a + b + c; } static void Main() { Console.WriteLine(sum(5, 7)); Console.WriteLine(sum(5, 7, 9)); } }
Nel codice sopra, il metodo sum
è stato sovraccaricato per avere due varianti di parametri. Un metodo può anche avere diversi tipi di ritorno per le sue varianti, tuttavia è importante che non vi sia ambiguità, altrimenti il compilatore mostrerà un errore poiché il modo principale per distinguere tra due metodi con lo stesso nome è la loro lista di parametri.
Ad esempio:
index.cs
12345678910static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int a, int b) { return a + b; }
Il codice sopra è errato perché i parametri sono esattamente gli stessi del metodo originale mentre il tipo di ritorno è diverso; questo non è consentito poiché rende impossibile per il compilatore (o anche per le persone) scegliere quale eseguire quando il metodo viene chiamato:
index.cs
123sum(1, 3); // Should it execute `int sum(int a, int b)` or `long sum(int a, int b)` ? // It is impossible to reach a good answer for the compiler in this case so it shows an error
Ecco perché, durante il sovraccarico di un metodo, un metodo che ha un tipo di ritorno diverso dovrebbe anche avere un insieme di parametri differente per renderlo distinguibile ed eliminare ambiguità. Anche il seguente esempio è errato:
index.cs
12345678910static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int first, int second) { return first + second; }
Questo perché i nomi dei parametri non sono rilevanti, mentre i loro tipi sì. I seguenti casi di sovraccarico sono validi:
index.cs
1234567891011121314151617181920212223242526using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static long sum(long a, long b) { return a + b; } static string sum(int a, long b, float c) { return Convert.ToString(a + b + c); } static void Main() { Console.WriteLine(sum(5, 7)); // Calls 'int sum()' Console.WriteLine(sum(500000000000, 700000000000)); // Calls 'long sum()' Console.WriteLine(sum(5, 7, 9)); // Calls 'string sum()' } }
1. Come fa il compilatore a distinguere tra metodi sovraccaricati?
2. Quale delle seguenti è un esempio valido di sovraccarico di metodo?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 2.04
Overloading Dei Metodi
Scorri per mostrare il menu
Il sovraccarico dei metodi in C# consente di definire più metodi con lo stesso nome all'interno di una classe, ciascuno differente per tipo o numero di parametri, o entrambi, offrendo un modo più ordinato e adattabile per gestire diversi scenari di input.
Ad esempio, è possibile avere due metodi con lo stesso nome ma un numero diverso di parametri:
index.cs
12345678910111213141516171819using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static int sum(int a, int b, int c) { return a + b + c; } static void Main() { Console.WriteLine(sum(5, 7)); Console.WriteLine(sum(5, 7, 9)); } }
Nel codice sopra, il metodo sum
è stato sovraccaricato per avere due varianti di parametri. Un metodo può anche avere diversi tipi di ritorno per le sue varianti, tuttavia è importante che non vi sia ambiguità, altrimenti il compilatore mostrerà un errore poiché il modo principale per distinguere tra due metodi con lo stesso nome è la loro lista di parametri.
Ad esempio:
index.cs
12345678910static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int a, int b) { return a + b; }
Il codice sopra è errato perché i parametri sono esattamente gli stessi del metodo originale mentre il tipo di ritorno è diverso; questo non è consentito poiché rende impossibile per il compilatore (o anche per le persone) scegliere quale eseguire quando il metodo viene chiamato:
index.cs
123sum(1, 3); // Should it execute `int sum(int a, int b)` or `long sum(int a, int b)` ? // It is impossible to reach a good answer for the compiler in this case so it shows an error
Ecco perché, durante il sovraccarico di un metodo, un metodo che ha un tipo di ritorno diverso dovrebbe anche avere un insieme di parametri differente per renderlo distinguibile ed eliminare ambiguità. Anche il seguente esempio è errato:
index.cs
12345678910static int sum(int a, int b) { return a + b; } // This is wrong and will show an error static long sum(int first, int second) { return first + second; }
Questo perché i nomi dei parametri non sono rilevanti, mentre i loro tipi sì. I seguenti casi di sovraccarico sono validi:
index.cs
1234567891011121314151617181920212223242526using System; class ConsoleApp { static int sum(int a, int b) { return a + b; } static long sum(long a, long b) { return a + b; } static string sum(int a, long b, float c) { return Convert.ToString(a + b + c); } static void Main() { Console.WriteLine(sum(5, 7)); // Calls 'int sum()' Console.WriteLine(sum(500000000000, 700000000000)); // Calls 'long sum()' Console.WriteLine(sum(5, 7, 9)); // Calls 'string sum()' } }
1. Come fa il compilatore a distinguere tra metodi sovraccaricati?
2. Quale delle seguenti è un esempio valido di sovraccarico di metodo?
Grazie per i tuoi commenti!