http://msdn.microsoft.com/ru-ru/library/bb383977.aspx.
Методы расширения позволяют «добавлять» методы в существующие типы без создания нового производного типа, перекомпиляции или иного изменения исходного типа. Методы расширения являются особым видом статического метода, но они вызываются, как если бы они были методами экземпляра в расширенном типе. Для клиентского кода, написанного на языках C# и Visual Basic, нет видимого различия между вызовом метода расширения и вызовом методов, фактически определенных в типе.
Наиболее стандартные методы расширения — стандартные операторы запросов LINQ, которые добавляют функции запросов в существующие типыSystem.Collections.IEnumerable и System.Collections.Generic.IEnumerable. Для использования стандартных операторов запросов необходимо перевести их в область применения с помощью директивы using System.Linq. Затем каждый тип, который реализует тип IEnumerable, будет иметь методы экземпляра, такие как GroupBy, OrderBy, Average и т. д. Эти дополнительные методы можно видеть в завершении операторов IntelliSense, когда вводится точка после экземпляра типа IEnumerable, например List или Array.
В следующем примере показано, как вызывать метод стандартного оператора запроса OrderBy для массива целых чисел. Выражение в скобках называется лямбда-выражением. Многие стандартные операторы запроса принимают лямбда-выражения в качестве параметров, но это не является обязательным для методов расширения. Для получения дополнительной информации см. Лямбда-выражения (Руководство по программированию в C#).
C#.
class ExtensionMethods2.
{.
static void Main ().
{.
int[] ints = { 10, 45, 15, 39, 21, 26 };
var result = ints. OrderBy (g => g);
foreach (var i in result).
{.
System.Console.Write (i + ««);
}.
}.
}.
//Output: 10 15 21 26 39 45.