if(Char.IsLower(ch)) temp += Char.ToUpper (ch, Culturelnfo.

CurrentCulture);

else temp += Char.ToLower(ch, Culturelnfo.CurrentCulture);

}

return temp;

}

// Возвратить абсолютное значение выражения n / d. public static double AbsDivideBy(this double n, double d) { return Math.Abs(n / d);

}

}

class ExtDemo {

static void Main() {

double val = 8.0;

string str = "Alpha Beta Gamma";

// Вызвать метод расширения Reciprocal()..

Console.WriteLine("Обратная величина {0} равна {1}", val, val.Reciprocal());

// Вызвать метод расширения RevCaseO .

Console.WriteLine(str + " после смены регистра: " + str.RevCase ());

// Использовать метод расширения AbsDivideBy() .

Console.WriteLine("Результат вызова метода val.AbsDivideBy(-2) : " + val.AbsDivideBy(-2));

}

}

Обратная величина 8 равна 0.125

Alpha Beta Gamma после смены регистра: aLPHA ЬЕТА дАММА Результат вызова метода val.AbsDivideBy(-2): 4

В данном примере программы каждый метод расширения содержится в статическом классеMyExtMeths.Как пояснялось выше, метод расширения должен быть объявлен в статическом классе. Более того, этот класс должен находиться в области действия своих методов расширения, чтобы ими можно было пользоваться. (Именно поэтому в исходный текст программы следует включить пространство именSystem. Linq,так как это дает возможность пользоваться методами расширения, связанными с LINQ.)

Объявленные методы расширения вызываются для объекта таким же образом, как и методы экземпляра. Главное отличие заключается в том, что вызывающий объект передается первому параметру метода расширения. Поэтому при выполнении выражения

val.AbsDivideBy(-2)

объектvalпередается параметрупметода расширенияAbsDivideBy (), а значение-2— параметруd.

Любопытно, что методы расширенияReciprocal() иAbsDivideBy() могут вполне законно вызываться и для литерала типаdouble,как показало ниже, поскольку они определены для этого типа данных.

8.0.Reciprocal()

8.0.AbsDivideBy(-1)

Кроме того, метод расширенияRevCase() может быть вызван следующим образом."AbCDe".RevCase()

В данном случае возвращается строковый литерал с измененным на обратный регистром букв.

PLINQ

В версии .NET Framework 4.0 внедрено новое дополнение LINQ под названием PLINQ. Это средство предназначено для поддержки параллельного программирования. Оно позволяет автоматически задействовать в запросе несколько доступных процессоров. Подробнее о PLINQ и других средствах, связанных с параллельным програмт-мированием, речь пойдет в главе 24.

ГЛАВА 20 Небезопасный код, указатели, обнуляемые типы и разные ключевые слова

Перейти на страницу:

Похожие книги