Как создать метод расширения (extension method) в C#?

«Как создать метод расширения (extension method) в C#?» — вопрос из категории C# Core, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Шаги для создания:

  1. Объявите статический класс.
  2. Объявите статический метод.
  3. Первый параметр метода укажите с ключевым словом this, за которым следует тип, который вы хотите расширить.

Пример: расширение для типа string

namespace MyExtensions
{
    public static class StringExtensions
    {
        public static string Reverse(this string input)
        {
            if (string.IsNullOrEmpty(input))
                return input;

            char[] charArray = input.ToCharArray();
            Array.Reverse(charArray);
            return new string(charArray);
        }
    }
}

Использование:

using MyExtensions; // Не забудьте добавить using для пространства имен

string original = "Hello";
string reversed = original.Reverse(); // Вызов метода расширения
Console.WriteLine(reversed); // Выведет: "olleH"

Важные ограничения и best practices:

  • Методы расширения не могут переопределять существующие методы экземпляра — приоритет всегда у «родного» метода типа.
  • Они работают только с public-членами расширяемого типа.
  • Нельзя создавать методы расширения для статических классов.
  • Размещайте методы расширения в отдельном пространстве имен для удобного подключения.
  • Используйте их умеренно, чтобы не «загрязнять» IntelliSense и не нарушать ясность кода.