Métodos de Extensión en C#
Aprende métodos de extensión en C# para añadir nuevas funcionalidades a tipos existentes sin modificar su código.
En C#, los métodos de extensión permiten agregar nuevas funciones a clases o estructuras existentes,
sin modificar su código fuente.
Estos métodos se definen dentro de una clase static, y su primer parámetro usa la palabra clave
this para especificar el tipo que se extiende.
Los métodos de extensión aumentan la funcionalidad manteniendo los tipos originales intactos.
Sintaxis básica
Un método de extensión siempre debe definirse dentro de una clase static.
Su primer parámetro está marcado con this para indicar el tipo que se amplía.
// Definición de un método de extensión
public static class StringExtensions
{
public static bool IsNullOrEmpty(this string? text)
{
return string.IsNullOrEmpty(text);
}
}
class Program
{
static void Main()
{
string s1 = null;
string s2 = "Hola";
Console.WriteLine(s1.IsNullOrEmpty()); // True
Console.WriteLine(s2.IsNullOrEmpty()); // False
}
}
Aquí, el método IsNullOrEmpty está definido en StringExtensions,
pero se puede usar como si fuera parte del tipo string.
Usos de los métodos de extensión
- Agregar nuevas funciones a clases existentes (por ejemplo,
string,DateTime). - Llamar métodos auxiliares comunes con una sintaxis más natural.
- Facilitar el código fluido (fluent) como en LINQ.
Ejemplos prácticos
Los métodos de extensión hacen que las operaciones comunes sean más legibles y convenientes.
// Métodos de extensión para enteros
public static class IntExtensions
{
// ¿Es el número par?
public static bool IsEven(this int number) => number % 2 == 0;
// ¿Es el número impar?
public static bool IsOdd(this int number) => number % 2 != 0;
}
class Program
{
static void Main()
{
int x = 10;
Console.WriteLine(x.IsEven()); // True
Console.WriteLine(x.IsOdd()); // False
}
}
Aquí, IsEven e IsOdd están definidos como si pertenecieran al tipo int.
Cualquier variable int puede usar directamente estos métodos.
// Método de extensión para DateTime
public static class DateTimeExtensions
{
// Verifica si la fecha cae en fin de semana
public static bool IsWeekend(this DateTime dt)
=> dt.DayOfWeek == DayOfWeek.Saturday || dt.DayOfWeek == DayOfWeek.Sunday;
}
class Program
{
static void Main()
{
DateTime today = DateTime.Now;
Console.WriteLine(today.IsWeekend() ? "Fin de semana" : "Día laboral");
}
}
LINQ y métodos de extensión
Todos los métodos LINQ están implementados como métodos de extensión.
Por ejemplo, Where, Select y OrderBy
son métodos de extensión escritos para IEnumerable<T>.
var numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
// Where es en realidad un método de extensión
var evens = numbers.Where(n => n % 2 == 0);
Console.WriteLine(string.Join(", ", evens)); // 2, 4, 6
Ejemplo: Manipulación de cadenas
Definamos métodos de extensión para realizar comprobaciones y transformaciones en textos.
public static class TextExtensions
{
// Convierte un string en formato título (cada palabra con mayúscula inicial)
public static string ToTitleCase(this string text)
{
if (string.IsNullOrWhiteSpace(text)) return string.Empty;
return string.Join(" ",
text.Split(' ', StringSplitOptions.RemoveEmptyEntries)
.Select(w => char.ToUpper(w[0]) + w.Substring(1).ToLower()));
}
// Verifica si un string contiene dígitos
public static bool ContainsDigit(this string text)
{
return text.Any(char.IsDigit);
}
}
class Program
{
static void Main()
{
string input = "hola mundo 2025";
Console.WriteLine(input.ToTitleCase()); // "Hola Mundo 2025"
Console.WriteLine(input.ContainsDigit()); // True
}
}
Ventajas
- Mejora la legibilidad del código con una sintaxis natural.
- Permite reutilizar clases existentes sin crear nuevas.
- Añade nuevas funciones sin modificar los tipos existentes.
- Permite centralizar los métodos auxiliares en un solo lugar.
TL;DR
- Los métodos de extensión son una forma de agregar nuevas funciones a clases existentes.
- Se definen en una clase
static; el primer parámetro conthisindica el tipo extendido. - Los métodos LINQ son los ejemplos más conocidos de métodos de extensión.
- Mejoran la legibilidad del código y aumentan la flexibilidad.
Artículos relacionados
Expresiones Lambda en C#
Aprende expresiones lambda en C#, incluyendo sintaxis concisa, delegados Func y Action y ejemplos prácticos con LINQ.
Interfaces y Clases Abstractas en C#
Aprende interfaces y clases abstractas en C#, sus diferencias y cuándo usar cada una para diseñar código limpio y extensible.
Métodos y uso de parámetros en C#
Aprende a definir métodos y usar parámetros en C#, incluyendo parámetros por valor y referencia, parámetros opcionales y ejemplos.
Namespaces y ensamblados en C#
Aprende los conceptos de namespaces y ensamblados en C# para organizar el código y gestionar dependencias correctamente.
Operaciones con cadenas en C#
Apprenez à manipuler les chaînes de caractères en C#, y compris la concaténation, la recherche, substring, IndexOf et plus encore.
Principios SOLID en C#
Aplicación de los principios SOLID en C# con ejemplos: código más flexible, mantenible y comprobable.