Menu
Coddy logo textTech

Sobrecarga de métodos

Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy — lección 50 de 70.

Sobrecarga de métodos le permite definir múltiples métodos con el mismo nombre pero con diferentes listas de parámetros. El compilador determina qué versión llamar basándose en los argumentos que usted proporcione.

Cada método sobrecargado debe tener una firma única, ya sea un número diferente de parámetros o diferentes tipos de parámetros:

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);
}
// El compilador elige la versión correcta
Print("Hello");           // Llama a Print(string)
Print("Hi", 3);           // Llama a Print(string, int)
Print(42);                // Llama a Print(int)

La sobrecarga se diferencia de los parámetros opcionales de una manera importante. Con los parámetros opcionales, tienes un único método que maneja múltiples escenarios. Con la sobrecarga, tienes métodos separados que pueden contener una lógica completamente diferente para cada caso.

Ten en cuenta que el tipo de retorno por sí solo no hace que los métodos sean únicos: no puedes tener dos métodos que se diferencien solo por lo que devuelven. La lista de parámetros debe ser diferente. La sobrecarga de métodos es una forma de polimorfismo en tiempo de compilación, donde la decisión sobre qué método llamar se toma cuando se compila el código, no cuando se ejecuta.

challenge icon

Desafío

Fácil

Vamos a construir una clase de calculadora versátil que demuestre el poder de la sobrecarga de métodos. Crearás múltiples versiones de métodos de cálculo que manejan diferentes escenarios, desde operaciones simples de dos números hasta cálculos más complejos, todos compartiendo los mismos nombres de métodos intuitivos.

Organizarás tu código en dos archivos:

  • Calculator.cs: Crea una clase Calculator en el espacio de nombres MathTools con métodos sobrecargados que comparten nombres pero aceptan diferentes parámetros:
    • Multiply - Crea tres versiones sobrecargadas:
      • Una que toma dos parámetros int y devuelve su producto como un int
      • Una que toma tres parámetros int y devuelve su producto como un int
      • Una que toma dos parámetros double y devuelve su producto como un double
    • Describe - Crea dos versiones sobrecargadas:
      • Una que toma un int y devuelve "Integer: {value}"
      • Una que toma un double y devuelve "Double: {value}"
  • Program.cs: En tu archivo principal, crea una instancia de Calculator y demuestra cómo el compilador selecciona automáticamente el método sobrecargado correcto basándose en los argumentos que proporciones.

Recibirás cuatro entradas:

  • Primer entero (por ejemplo, 5)
  • Segundo entero (por ejemplo, 4)
  • Tercer entero (por ejemplo, 3)
  • Un número decimal (por ejemplo, 2.5)

Usando tu calculadora, realiza estas operaciones e imprime cada resultado en su propia línea:

  1. Multiplica los dos primeros enteros (usa la versión de dos int)
  2. Multiplica los tres enteros (usa la versión de tres int)
  3. Multiplica el primer entero y el número decimal (usa la versión de dos double)
  4. Describe el primer entero (usa la versión int)
  5. Describe el número decimal (usa la versión double)

Por ejemplo, si las entradas son 5, 4, 3, y 2.5, la salida debería ser:

20
60
12.5
Integer: 5
Double: 2.5

Observa cómo llamas a Multiply y Describe con diferentes tipos y cantidades de argumentos, y aun así el compilador sabe exactamente qué versión usar cada vez. ¡Esto es polimorfismo en tiempo de compilación en acción: la decisión ocurre cuando se compila tu código, no cuando se ejecuta!

Hoja de referencia

La sobrecarga de métodos permite definir múltiples métodos con el mismo nombre pero con diferentes listas de parámetros. El compilador determina qué versión llamar basándose en los argumentos proporcionados.

Cada método sobrecargado debe tener una firma única, ya sea un número diferente de parámetros o diferentes tipos de parámetros:

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);
}

// El compilador elige la versión correcta
Print("Hello");           // Llama a Print(string)
Print("Hi", 3);           // Llama a Print(string, int)
Print(42);                // Llama a Print(int)

Puntos clave sobre la sobrecarga de métodos:

  • La sobrecarga difiere de los parámetros opcionales: con la sobrecarga, se tienen métodos separados que pueden contener una lógica completamente diferente para cada caso
  • El tipo de retorno por sí solo no hace que los métodos sean únicos; la lista de parámetros debe ser diferente
  • La sobrecarga de métodos es una forma de polimorfismo en tiempo de compilación, donde la decisión sobre qué método llamar se toma cuando se compila el código, no cuando se ejecuta

Pruébalo tú mismo

using System;
using MathTools;

class Program
{
    public static void Main(string[] args)
    {
        // Leer entradas
        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: Crear una instancia de Calculator

        // TODO: Llamar a Multiply con dos enteros e imprimir el resultado

        // TODO: Llamar a Multiply con tres enteros e imprimir el resultado

        // TODO: Llamar a Multiply con el primer entero y el número decimal, imprimir el resultado

        // TODO: Llamar a Describe con el primer entero e imprimir el resultado

        // TODO: Llamar a Describe con el número decimal e imprimir el resultado
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos