Методы расширения (extension methods) в C#

Методы расширения в C# позволяют добавлять новые методы к уже существующим типам без необходимости их изменения. Это удобно, когда доступ к исходному коду класса отсутствует или его нельзя модифицировать.

Особенности методов расширения

  • Должны быть определены в статическом классе.
  • Сам метод расширения должен быть статическим.
  • Первый параметр метода определяет тип, который расширяется, и указывается с ключевым словом this.
  • Вызываются так же, как обычные методы экземпляра.

Пример использования

Расширение типа object

public static class ObjectExtensions
{
    public static bool IsNull(this object obj)
    {
        return obj == null;
    }
}

class Program
{
    static void Main()
    {
        object value1 = null;
        Console.WriteLine(value1.IsNull()); // true
        
        object value2 = "";
        Console.WriteLine(value2.IsNull()); // false
    }
}

Расширение пользовательского класса

public class Person
{
    public string Name { get; set; }
}

public static class PersonExtensions
{
    public static void PrintName(this Person person)
    {
        Console.WriteLine($"Имя: {person.Name}");
    }
}

class Program
{
    static void Main()
    {
        var person = new Person { Name = "Алексей" };
        person.PrintName(); // Имя: Алексей
    }
}

Когда использовать методы расширения

  • Для добавления функциональности к типам без изменения их исходного кода.
  • Для упрощения работы с часто используемыми операциями.
  • Для удобного написания методов, работающих с интерфейсами (например, IEnumerable<T>).

Методы расширения позволяют сделать код более читаемым и удобным, добавляя новые возможности к существующим типам без их модификации.