Capítulo 23: Sobrecarga de métodos
Capítulo 23: Sobrecarga de métodos
Sección titulada «Capítulo 23: Sobrecarga de métodos»Parte IV: Flujo de control y decisiones - Sección 9: Métodos y organización - Nivel: Intermedio
Objetivos de aprendizaje
Sección titulada «Objetivos de aprendizaje»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
Requisitos previos
Sección titulada «Requisitos previos»- Capítulo 22 (Métodos con valor de retorno)
- Conceptos básicos de firmas de métodos
Introducción: ¿Por qué sobrecargar?
Sección titulada «Introducción: ¿Por qué sobrecargar?»A veces quieres realizar la misma acción, pero con diferentes niveles de detalle.
Por ejemplo, para enviar un mensaje:
Log("Hola")-> Mensaje simpleLog("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.
1. Concepto de Sobrecarga
Sección titulada «1. Concepto de Sobrecarga»La sobrecarga permite definir varios métodos con el mismo nombre, siempre que su firma (parámetros) sea diferente.
1.1 Ejemplo básico
Sección titulada «1.1 Ejemplo básico»// Versión 1: Solo mensajeprivate void Log(string message){ // Lógica básica}
// Versión 2: Mensaje y nivelprivate 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(); }}Ventajas:
Sección titulada «Ventajas:»- Código limpio:
Log("Hola")es más fácil de leer quenew BaseException("Hola", MessageLevel.Message).FixMessage(). - DRY (Don’t Repeat Yourself): La lógica de
FixMessageestá en un solo lugar.
3. Sobrecarga vs Parámetros Opcionales
Sección titulada «3. Sobrecarga vs Parámetros Opcionales»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).
4. Ejemplo práctico: Exportador Flexible
Sección titulada «4. Ejemplo práctico: Exportador Flexible»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); }}Resumen
Sección titulada «Resumen»- 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.
Conexiones
Sección titulada «Conexiones»Capítulo anterior
Sección titulada «Capítulo anterior»Capítulo 22: Métodos con valor de retorno
Próximo capítulo
Sección titulada «Próximo capítulo»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.