Métodos en clases de C# con void y string

Resumen

Crear métodos en C# es lo que da vida a tus objetos: les dice qué pueden hacer. Si ya entendiste cómo inicializar valores con un constructor, el siguiente paso lógico es definir el comportamiento de tu clase mediante métodos personalizados. Aquí verás cómo hacerlo en un proyecto real con superhéroes y superpoderes.

Qué es un método dentro de una clase

Un método es una función que vive dentro de una clase y ejecuta una acción específica sobre el objeto. Mientras una propiedad guarda datos, un método define qué puede hacer ese objeto con sus datos.

En proyectos típicos como un CRUD, los métodos más comunes son insertar, actualizar y eliminar. Pero el tipo de método depende del problema que estés resolviendo. En el ejemplo de la clase Superheroe, el método tiene una misión clara: usar los superpoderes que tiene asignados ese superhéroe [02:15].

¿Qué diferencia hay entre una propiedad y un método en C#? Una propiedad guarda un valor y se accede con objeto.propiedad. Un método ejecuta una acción y se invoca con paréntesis: objeto.metodo().

Cómo crear un método void en C#

El tipo void indica que el método ejecuta una acción pero no devuelve ningún valor. Es ideal cuando solo necesitas que el método haga algo internamente, como imprimir en pantalla.

En la clase Superheroe, el método UsarSuperpoderes recorre la colección de poderes y muestra un mensaje por cada uno:

csharp public void UsarSuperpoderes() { foreach (var item in Superpoderes) { Console.WriteLine($"¡{Nombre} está usando el superpoder {item.Nombre}!"); } }

Aquí pasan tres cosas interesantes. Primero, el foreach itera sobre la colección Superpoderes y item representa cada elemento dentro de esa colección. Segundo, el símbolo $ activa string interpolation, que te permite concatenar variables dentro de un string de forma legible. Tercero, accedes a Nombre (del superhéroe) y a item.Nombre (del superpoder) en la misma línea [04:30].

Cómo invocar un método en C#

Para ejecutar el método, basta con tomar el objeto y llamarlo con paréntesis:

csharp superman.UsarSuperpoderes();

Los paréntesis son la señal visual que distingue un método de una propiedad. Si Superman tiene asignados los poderes de volar y superfuerza, la consola imprimirá dos líneas, una por cada poder.

Cómo hacer que un método devuelva un valor con string

Lo más común en programación orientada a objetos es que los métodos devuelvan datos para que tú decidas qué hacer con ellos después. En lugar de imprimir directamente, puedes cambiar el tipo void por string y retornar el texto concatenado.

Para esto entra en escena la clase StringBuilder, una clase interna de C# diseñada para concatenar strings de manera eficiente. En vez de usar Console.WriteLine dentro del bucle, acumulas cada línea con el método AppendLine y al final devuelves el resultado completo con ToString() [07:50].

csharp public string UsarSuperpoderes() { StringBuilder sb = new StringBuilder(); foreach (var item in Superpoderes) { sb.AppendLine($"¡{Nombre} está usando el superpoder {item.Nombre}!"); } return sb.ToString(); }

Luego, en el código que consume el método, recibes el valor en una variable y decides dónde imprimirlo:

csharp string resultSuperpoderes = superman.UsarSuperpoderes(); Console.WriteLine(resultSuperpoderes);

¿Para qué sirve StringBuilder en C#? Es una clase optimizada para construir strings paso a paso sin crear nuevos objetos en cada concatenación. Útil cuando armas texto dentro de bucles.

Por qué conviene devolver datos en lugar de imprimirlos

Cuando un método devuelve un valor, ganas flexibilidad. Puedes imprimirlo en consola, guardarlo en un archivo, enviarlo por una API o transformarlo. Si el método imprime directamente, lo atas a un único uso. Por eso, aunque ambas opciones son válidas, devolver datos es la práctica más común en aplicaciones reales.

Diferencia entre void y tipos de retorno en métodos

La elección entre void y un tipo de retorno depende de la responsabilidad del método.

  • Usa void cuando el método solo ejecuta una acción interna sin necesidad de comunicar un resultado.
  • Usa string, int, bool u otro tipo cuando el método produce información que el resto del programa necesita procesar.
  • Recuerda que C# es un lenguaje fuertemente tipado, así que el tipo de retorno declarado debe coincidir con lo que realmente devuelves.

Con esto ya tienes en tu kit de programación orientada a objetos la capacidad de inicializar objetos con constructores y de definir su comportamiento con métodos. ¿Qué método le agregarías a tu propia clase Superheroe? Cuéntame en los comentarios qué comportamientos se te ocurren.