Sobrecarga de Métodos
La sobrecarga de métodos en C# permite definir múltiples métodos con el mismo nombre en una clase, diferenciándose por los tipos de parámetros, la cantidad de parámetros o ambos, proporcionando una forma más limpia y adaptable de manejar diversos escenarios de entrada.
Por ejemplo, se pueden tener dos métodos con el mismo nombre pero diferente número de parámetros:
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)); } }
En el código anterior, el método sum
fue sobrecargado para tener dos variantes de parámetros. Un método también puede tener diferentes tipos de retorno para sus distintas variantes; sin embargo, es importante que no exista ambigüedad, de lo contrario el compilador mostrará un error, ya que la forma principal en que el compilador distingue entre dos métodos con el mismo nombre es su lista de parámetros.
Por ejemplo:
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; }
El código anterior es incorrecto porque los parámetros son exactamente los mismos que los del método original, mientras que el tipo de retorno es diferente. Esto no está permitido, ya que hace imposible que el compilador (o incluso las personas) elijan cuál ejecutar cuando se llama al método:
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
Por este motivo, al sobrecargar un método, un método que tenga un tipo de retorno diferente también debe tener un conjunto diferente de parámetros para que sea distinguible y evitar ambigüedades. Lo siguiente también es incorrecto:
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; }
Esto se debe a que los nombres de los parámetros no importan, pero sí sus tipos. Los siguientes casos de sobrecarga son válidos:
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. ¿Cómo diferencia el compilador entre métodos sobrecargados?
2. ¿Cuál de los siguientes es un ejemplo válido de sobrecarga de métodos?
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Awesome!
Completion rate improved to 2.04
Sobrecarga de Métodos
Desliza para mostrar el menú
La sobrecarga de métodos en C# permite definir múltiples métodos con el mismo nombre en una clase, diferenciándose por los tipos de parámetros, la cantidad de parámetros o ambos, proporcionando una forma más limpia y adaptable de manejar diversos escenarios de entrada.
Por ejemplo, se pueden tener dos métodos con el mismo nombre pero diferente número de parámetros:
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)); } }
En el código anterior, el método sum
fue sobrecargado para tener dos variantes de parámetros. Un método también puede tener diferentes tipos de retorno para sus distintas variantes; sin embargo, es importante que no exista ambigüedad, de lo contrario el compilador mostrará un error, ya que la forma principal en que el compilador distingue entre dos métodos con el mismo nombre es su lista de parámetros.
Por ejemplo:
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; }
El código anterior es incorrecto porque los parámetros son exactamente los mismos que los del método original, mientras que el tipo de retorno es diferente. Esto no está permitido, ya que hace imposible que el compilador (o incluso las personas) elijan cuál ejecutar cuando se llama al método:
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
Por este motivo, al sobrecargar un método, un método que tenga un tipo de retorno diferente también debe tener un conjunto diferente de parámetros para que sea distinguible y evitar ambigüedades. Lo siguiente también es incorrecto:
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; }
Esto se debe a que los nombres de los parámetros no importan, pero sí sus tipos. Los siguientes casos de sobrecarga son válidos:
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. ¿Cómo diferencia el compilador entre métodos sobrecargados?
2. ¿Cuál de los siguientes es un ejemplo válido de sobrecarga de métodos?
¡Gracias por tus comentarios!