Программирование >>  Программирование с использованием ajax 

1 ... 129 130 131 [ 132 ] 133 134 135 ... 396


Метод расширения определяется тем же обр?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



1 ... 129 130 131 [ 132 ] 133 134 135 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика