English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Как следует из названия, расширяемые методы - это дополнительные методы. Расширяемые методы позволяют внедрять другие методы, не modificating, наследуя или пересобирая исходный класс, структуру или интерфейс. Расширяемые методы можно добавить к своим собственным пользовательским классам, классам .NET Framework или третьим сторонним классам или интерфейсам.
Расширяемые методы - это новая функция в C# 3.0, которая позволяет расширять функции исходного кода без изменения исходного класса, структуры или интерфейса через режим ADD File.
Требования к расширяемым методам:
Расширяемые методы должны быть включены в класс, модифицированный статическим.
Реализация расширения должна быть статической.
Первый параметр расширяемого метода имеет префикс this, что означает, что необходимо расширить объект класса, а с второго параметра начинаются параметры списка расширяемого метода.
В следующем примере IsGreaterThan () является расширяемым методом типа int, который возвращает true, если значение переменной int больше предоставленного целого числа.
int i = 10; bool result = i.IsGreaterThan(100); // Возвращает FALSE
Метод IsGreaterThan () не является методом типа данных int (int32 структуру). Это расширяемый метод, написанный программистом для типа данных int. Включив пространство имён, в котором определён расширяемый метод IsGreaterThan (), метод расширения IsGreaterThan () будет доступен во всём приложении.
Расширяемые методы в Visual Studio IntelliSense имеют особые символы, благодаря которым вы можете легко отличить методы класса от расширяемых методов.
Теперь давайте посмотрим, как пишутся расширяемые методы.
Расширяемые методы на самом деле являются особыми статическими методами, определёнными в статическом классе. Чтобы определить расширяемый метод, сначала определите статический класс.
Например, в следующем примере мы создали класс IntExtensions в пространстве имён ExtensionMethods. Класс IntExtensions будет содержать все расширяемые методы для типа данных int. (Вы можете использовать любое имя для пространства имён и класса.)
namespace ExtensionMethods { public static class IntExtensions { } }
Теперь определим статический метод как расширяемый метод, где первый параметр расширяемого метода определяет тип, на котором применяется расширение. Мы будем использовать этот расширяемый метод на типе int. Поэтому перед первым параметром int нужно добавитьthis Модификаторы.
Например, метод IsGreaterThan() operates на int, поэтому первым параметром является this int i.
namespace ExtensionMethods { public static class IntExtensions { public static bool IsGreaterThan(this int i, int value) { return i > value; } } }
Теперь вы можете включить пространство имён ExtensionMethods в любое место, где вы хотите использовать этот расширяемый метод.
using ExtensionMethods; class Program { static void Main(string[] args) { int i = 10; bool result = i.IsGreaterThan(100); Console.WriteLine(result); } }
false
Единственное различие между обычными статическими методами и расширяемыми методами заключается в том, что первый параметр расширяемого метода определяет тип, на котором будет выполняться операция оператора, за ним следует this Ключевые слова.
C# поддерживает только расширяемые методы, не поддерживает расширяемые свойства, расширяемые события, расширяемые операторы и т.д.
Расширяемые методы (методы, перед которыми стоит this) должны быть объявлены в неgeneric статическом классе, расширяемый метод должен иметь один параметр, и только первый параметр помечен this.
Компилятор C# требует, чтобы статические классы, в которых ищутся расширяемые методы, имели файловую область действия.
Компилятор C# требует «импорта» расширяемых методов. (Статические методы могут иметь любое имя, компилятор C# тратит время на поиски методов, нужно проверять все статические классы в области файла и сканировать их все статические методы для поиска соответствия)
Множественные статические классы могут определять одинаковые расширяемые методы.
Использование расширяемого метода для расширения типа также расширяет производные типы.
Необходимо определить в неnested, неgeneric статическом классе (поэтому это должен быть статический метод)
Минимум один параметр.
Первый параметр должен начинаться с ключевого слова this.
Первый параметр не может иметь других модификаторов (например, ref или out).
Тип первого параметра не может быть типом указателя.
Методы расширения - это другие пользовательские методы, которые изначально не включены в класс.
Методы расширения можно добавлять к пользовательским, .NET Framework или сторонним классам, структурам или интерфейсам.
Первый параметр расширяемого метода должен быть типом, к которому применяется расширяемый метод, за которым следуетthisКлючевые слова.
Методы расширения можно использовать в любом месте приложения, если они включены в пространство имен, содержащее их имя.