Ir al contenido

Capítulo 23: Sobrecarga de métodos

Parte IV: Flujo de control y decisiones - Sección 9: Métodos y organización - Nivel: Intermedio


Al finalizar este capítulo serás capaz de:

  • Entender qué es la sobrecarga de métodos (Method Overloading)
  • Crear múltiples versiones de un método con el mismo nombre
  • Simplificar el uso de tus funciones auxiliares proporcionando valores por defecto
  • Aplicar sobrecarga para logging y manejo de mensajes en EPLAN

  • Capítulo 22 (Métodos con valor de retorno)
  • Conceptos básicos de firmas de métodos

A veces quieres realizar la misma acción, pero con diferentes niveles de detalle.

Por ejemplo, para enviar un mensaje:

  1. Log("Hola") -> Mensaje simple
  2. Log("Error de conexión", true) -> Mensaje que es un error

En lugar de crear métodos con nombres distintos (LogSimple, LogError), puedes usar el mismo nombre Log para ambos. Esto se llama sobrecarga.


La sobrecarga permite definir varios métodos con el mismo nombre, siempre que su firma (parámetros) sea diferente.

// Versión 1: Solo mensaje
private void Log(string message)
{
// Lógica básica
}
// Versión 2: Mensaje y nivel
private void Log(string message, bool isError)
{
// Lógica avanzada
}

C# sabe cuál ejecutar basándose en los parámetros que le pasas.


2. Aplicación en EPLAN: Wrapper de BaseException

Sección titulada «2. Aplicación en EPLAN: Wrapper de BaseException»

BaseException requiere siempre el nivel (MessageLevel). Podemos simplificar esto usando sobrecarga.

Basado en EPLAN-Scripting-4.0/04_CodeFlow/07_MethodOverloading.cs:

using Eplan.EplApi.Base;
using Eplan.EplApi.Scripting;
public class SobrecargaLogger
{
[Start]
public void Function()
{
// Llamada simple (asume MessageLevel.Message)
Log("Inicio del proceso");
// Llamada detallada (especifica Warning)
Log("El archivo ya existe", MessageLevel.Warning);
// Llamada detallada (especifica Error)
Log("No se pudo escribir", MessageLevel.Error);
}
// Sobrecarga 1: Solo texto (Usa Message por defecto)
private void Log(string message)
{
// Reutilizamos la lógica del método más complejo
Log(message, MessageLevel.Message);
}
// Sobrecarga 2: Texto y Nivel (Implementación real)
private void Log(string message, MessageLevel level)
{
new BaseException(message, level).FixMessage();
}
}
  • Código limpio: Log("Hola") es más fácil de leer que new BaseException("Hola", MessageLevel.Message).FixMessage().
  • DRY (Don’t Repeat Yourself): La lógica de FixMessage está en un solo lugar.

En C# moderno, también puedes usar parámetros opcionales.

Sobrecarga (Estilo Clásico):

void Metodo(int a) { ... }
void Metodo(int a, int b) { ... }

Parámetros Opcionales (Alternativa):

void Metodo(int a, int b = 0) { ... }

Ambos son válidos. La sobrecarga es útil cuando la lógica cambia drásticamente entre versiones, o para mantener compatibilidad con versiones antiguas de C# (aunque en scripts modernos de EPLAN se soportan características nuevas).


Vamos a crear un helper Export que permita exportar con configuraciones por defecto o personalizadas.

using System.Windows.Forms;
using Eplan.EplApi.ApplicationFramework;
using Eplan.EplApi.Scripting;
public class ExportadorFlexible
{
[Start]
public void Function()
{
// Exportación rápida (solo nombre)
Export("ListadoSimple");
// Exportación detallada (nombre y formato)
Export("PlanoCompleto", "DWG");
}
// Versión 1: Solo nombre (asume PDF)
private void Export(string fileName)
{
Export(fileName, "PDF");
}
// Versión 2: Nombre y formato (Implementación real)
private void Export(string fileName, string format)
{
ActionCallingContext ctx = new ActionCallingContext();
ctx.AddParameter("EXPORTFILE", fileName);
ctx.AddParameter("TYPE", format);
new CommandLineInterpreter().Execute("export", ctx);
MessageBox.Show("Exportado: " + fileName + "." + format);
}
}

  • La Sobrecarga permite usar el mismo nombre para métodos similares.
  • Es ideal para crear “Wrappers” o funciones de utilidad que simplifican el código principal.
  • Puedes llamar a una versión desde otra para evitar duplicar código.

Capítulo 22: Métodos con valor de retorno

Capítulo 24: Decider - Preguntar al usuario

En la Parte V, nos centraremos en la interacción con el usuario, comenzando con diálogos de decisión.