Cargando...

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


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


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 con this indica 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