Расширения (Extension) в языке C# – это методы в программах на языке C# (старше версии 3), которые позволяют добавить новый функционал в существующий статический класс. Это очень полезно, когда нет возможности изменить исходный код существующего класса, но при этом добавление новых методов необходимо.
Основные правила для расширений:
1. Методы не должны перекрывать существующие;
2. Имена расширений не должны совпадать с уже существующими. В таком случае созданные расширения просто не будут работать;
3. Расширенные методы не применяются на поля, свойства или события;
4. Не злоупотребляйте расширениями.
В примере расширения создадим метод, возвращающий ответ, является строка длинной или короткой.
Метод должен быть описан в статическом классе. Рекомендую этот класс назвать как-то понятно, например, ExtensionMethods. Метод будет возвращать строковую переменную newTest. Для того, чтобы указать, что это расширение, используется в параметрах метода ключевое слово this. Оно указывается перед первым параметром и указывает, для какого класса создается расширение. В данном примере создается расширение для класса String.
static class ExtensionMethods { public static string IsThisStringLong(this String input) { string newTest = ""; if (input.Length > 10) { newTest = "Длинная"; } else { newTest = "Короткая"; } return newTest; } }
Обращение к расширению из программы выглядит так:
string test = "New string is here"; Console.WriteLine(test.IsThisStringLong());
В методе не указывается первый параметр в скобках, т.к. он передается переменной, к которой метод применяется.
Класс с расширением можно разместить как в том же пространстве имен, так и в другом. Во втором случае необходимо использовать директиву using для указания пространства имен с классом метода расширения.