|
Программирование >> Программирование с использованием ajax
Метод расширения определяется тем же обр?130м, что и любой другой метод, но должен обязательно отвечать требованиям предусмотренного для методов расширения синтаксиса. Эти требования выглядят следующим образом. а Метод должен обязательно быть статическим. а Метод должен обязательно включать параметр, представляющий экземпляр того типа, для которого будет вызываться этот метод расширения. (Здесь этот параметр будет называться параметром экземпляра.) □ Параметр экземпляра должен обязательно определяться для метода первым. □ Параметр экземпляра не должен сопровождаться никаким другим модификатором, кроме ключевого слова this. Синтаксис, который необходимо использовать для определения метода расширения, выглядит следующим образом: public static class класс расширения public static возвращаемый тип имя метода расширения ( this расширяемый тип instance) Импортировав пространство имен, содержащее статический класс, в состав которого входит данный метод (т.е., как говорят, сделав метод расширения доступным), можно приступать к написанию непосредственно самого кода, как показано ниже: расширяемый тип myVar; myVar инициализируется в коде, который здесь не показан, туVar.имя метода расширения(); При желании можно включать в метод расширения любые дополнительные параметры и пользоваться его возвращаемым типом. По сути, приведенный выше вызов идентичен тому, что показан ниже, но только имеет более простой синтаксис: расширяемый тип myVar; myVar инициализируется в коде, который здесь не показан. кла сс ра сширения. имя ме тода ра сширения (туVa г) ; Другое преимущество состоит в том, что после импорта находить необходимые функциональные возможности становится гораздо легче путем просмотра данных о методах расширения в окне IntelliSense. Методы расширения могут быть разбросаны по многим классам расширения или даже библиотекам, но все они все равно будут появляться в списке членов расширенного типа. При определении метода расширения, предназначенного для использования с каким-то определенным типом, его также можно применять и с любым из типов, унаследованных от данного. В случае примера, приводившегося ранее в этой главе, определение метода расширения для класса Animal позволило бы вызывать его также, например, и для объекта Cow. Методы расширения представляют собой замечательный способ для предоставления библиотек вспомогательного кода, пригодного для многократного использования во множестве разных приложений. Еще они обширно применяются в технологии LINQ, о которой более подробно рассказывается позже в книге. Следующее практическое занятие позволит разобраться в них еще лучше. Практическое занятие Методы расширения 1. Создайте новое консольное приложение с именем СЫ4ЕхОЗ и сохраните его в каталоге С:\BegVCSharp\Chapterl4. 2. Добавьте в решение новый проект типа библиотеки классов с именем ExtensioLib. 3. Удалите уже существующий файл класса Classl .cs из ExtensionLib и добавьте новый класс с именем ExtensionLibExtensions. 4. Измените код в файле ExtensionLibExtensions. cs следующим образом public static class ExtensionLibExtensions { public static string ToTitleCase (this string inputString, bool forceLower) { inputString = inputString.TrimO; if (inputString == ) return ; if (forceLower) { inputString = inputString.ToLower (); string[] inputStringAsArray = inputString.Split ( ); StringBuilder sb = new StringBuilder(); for (int i = 0; i < inputStringAsArray.Length; i++) if (inputStringAsArray[i].Length > 0) Sb.AppendFormat( {0}{1} inputStringAsArray[i].Substring (0, 1).ToUpper(), inputStringAsArray[i].Substring(1)); return sb.ToString (0, sb.Length - 1) ; public static string ReverseString(this string inputString) return new string(inputString.ToCharArray().Reverse().ToArray()); public static string ToStringReversed (this object inputObject) return inputObject.ToString0.ReverseString(); } 5. Добавьте в проект Chl4Ex03 ссылку на проект ExtensionLib. 6. Измените код в файле Program.cs следующим образом: using System; using System.Collections.Generic; using System.Linq; using System.Text; using ExtensionLib; namespace Chl4Ex03 { class Program static void Main(string[] args) { Console.WriteLine( Enter a string to convert: ); Введите строку, подлежащую преобразованию string sourceString = Console. ReadLine () ; Console.WriteLine( String with title casing: {0) , Строка CO словами, начинающимися с заглавной буквы sourceString.ToTitleCase(true)); Console. WriteLine ( String backwards: {0} , sourceString. Reversestring ()) ; / / Строка в обратном порядке Console.WriteLine ( String length backwards: {0) , Длина строки в обратном порядке sourceString.Length.ToStringReversed()); Console.ReadKey(); 7. Запустите приложение. Когда появится приглашение, введите строку (состоящую хотя бы из 10 символов в длину и более чем одного слова для достижения наилучшего эффекта). На рис. 14.9 показан пример результата, который должен получиться. Рис. 14.9. Приложение Chl4Ex03 в действии Описание полученных результатов в этом примере мы сначала создали библиотеку классов, содержащую вспомогательные методы расширения, и затем использовали ее в простом клиентском приложении. Статический класс, содержащий методы расширения, называется в этой библиотеке ExtensionLibExtensions, поэтому мы импортировали содержащее его пространство имен ExtensionLib в клиентское приложение, чтобы сделать методы расширения доступными. Три созданных метода расширения показаны в табл. 14.1. Таблица 14.1. Методы расширения Метод Что делает ToTitleCase о ReverseString О ToStringReversed() Преобразует в заглавную первую букву каждого слова в строке (string) и возвращает строку. Имеет параметр bool, который в случае равенства true приводит вначале к преобразованию строки в нижний регистр Изменяет порядок букв в строке на обратный и возвращает ее Использует метод Reverse () ДЛЯ изменения на обратный порядка букв в строке, возвращаемой после вызова метода ToString о для объекта object. Возвращает string
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |