Umas das novidades do C# 3.0 é a possibilidade de adicionar comportamento a uma classe sem a necessidade da criação de uma subclasse ou da recompilação do código original.

Essa funcionalidade é chamada de Extension Methods.

Criando um Extension Method

Imagine que você precisa validar se uma string é um e-mail válido. A solução mais comum é a definição de um método de validação (estático) em uma classe utilitária (estática).

static class Program
{
  static void Main(string[] args)
  {
    string emailCliente = System.Console.ReadLine();

    if (!Utilidades.IsEmailValido(emailCliente))
      System.Console.WriteLine("E-mail informado inválido.");
  }
}

Usando um Extension Method a solução é parecida, mas a utilização é mais elegante.

if (!emailCliente.IsEmailValido())
  System.Console.WriteLine("E-mail informado inválido.");

A criação do Extension Method se resume a definição de uma classe estática com um método estático.

namespace Utilidades
  public static class Extensoes
  {
    public static bool IsEmailValido(this string email)
    {
      return Regex.IsMatch(email, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
    }
  }
}

Notem o keyword this antes da declaração do primeiro parâmetro. Ele é responsável por passar ao compilador que o método IsEmailValido é aplicável a todos os objetos do tipo string.

E para utilizar o extension method basta importar o namespace que contém a classe estática usando o statement using. Sendo que não é necessária a importação caso as classes estejam dentro do mesmo namespace.

using Utilidades;

Passando parâmetros para o Extension Method

namespace Utilidades
  public static class Extensoes
  {
    public static bool IsMaiorQue(this string s, int tamanho)
    {
      return s.Length > tamanho;
    }
  }
}

string nome = "Joao da Silva";

if (nome.IsMaiorQue(10))
  System.Console.WriteLn("Nome só pode ter 10 caracteres");

Com essa introdução dá para ter uma pequena idéia das possibilidades. Vale lembrar que também é possível criar extension methods para interfaces e generics.

Abaixo três boas referências que valem à pena dar uma lida.