В данном примере программы каждый метод расширения содержится в статическом классе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 Небезопасный код, указатели, обнуляемые типы и разные ключевые слова
В этой главе рассматривается средство языка С#, которое обычно захватывает программистов врасплох. Это небезопасный код. В таком коде зачастую используются указатели. Совместно с небезопасным кодом указатели позволяют разрабатывать на C# приложения, которые обычно связываются с языком C++, высокой производительностью и системным кодом. Более того, благодаря включению небезопасного кода и указателей в состав C# в этом языке появились возможности, которые отсутствуют в Java.
В этой главе рассматриваются также обнуляемые типы, определения частичных классов и методов, буферы фиксированного размера. И в заключение этой главы представлен ряд ключевых слов, не упоминавшихся в предыдущих главах.
Небезопасный код