Já pensou na possibilidade de implementar seus próprios métodos e torna-los acessiveis de objetos já existentes. Criar novas funcionalidades e utiliza-las a partir de tipos nativos da framework sem que seja necessário recompilar o código fonte ou modificar nada ? Este é o poder dos Extensions Methods.
Criado principalmente para dar suporte as operações do LINQ, o Extensions Methods permite de forma fácil a criação de métodos que possam ser acessíveis de tipos já existentes sem a necessidade de alteração de código fontes. É uma tremenda mão na roda para a criação de novas funcionalidade, principalmente para criação de bibliotecas de pequenas funcionalidades da aplicação (util).
1. Regras Básicas:
Para um método poder ser utilizado como um método extensível, existem algumas regras a serem seguidas:
- A classe tem de ser estática
- O método tem de ser estático
- O Tipo do método define o retorno dele, não precisa ser o mesmo do objeto invocador
- O parâmetro do método é aonde será definido a que tipo aquela nova funcionalidade será atrelada, esta definição é feito através da palavra reserva this + tipo + nome do parâmetro
- A classe tem de estar em um arquivo único
2.Exemplo básico:
Para um exemplo básico, vamos criar um método que converte string para inteiro e caso o valor passado não possa ser convertido, ele retorna zero. Conforme a Listagem 1 veja que criamos uma classe estática chamada Extensions(mas poderia ser qualquer nome) com um método estático chamado ToInt aonde no parâmetro eu passo This String S que me diz que este método irá trabalhar com objetos do tipo String.
namespace Artigo.ExtensionsMethods
{
public static class Extensions
{
public static int ToInt(this string s)
{
int outInt = 0;
int.TryParse(s, out outInt);
return outInt;
}
}
}
Listagem 1. Extension Method que convert String para Inteiro
Para utilizar-mos nosso método extensivo, devemos adicionar o namespace do projeto(que contem o extension method) na classe quer irá utilizar o nosso método, conforme a listagem 2:
using Artigo.ExtensionsMethods;
Listagem 2. Adicionar o namespace na classe utilizadora
E com isto já conseguimos utilizar nosso novo método. Para testarmos vamos criar um variável do tipo string conforme a listagem 3. Veja que o intellisense já reconhece nosso método e o traz na lista de opções conforme a Figura 1

Figura 1. Intellisense mostrando o Extension Method
string sNumeral = "150";
int iNumero = sNumeral.ToInt();
/*Retorno:150*/
Listagem 3. Código utilizando o Extension Method para converter String para Int
Veja que não foi necessário passar nenhum parâmetro, isto por que ele já é embutido através do tipo do objeto que esta chamando o método.
3. Extension Method mais Funcional:
Vamos agora criar um Extension Method que tenha uma funcionalidade um pouco mais complexa e exija que utilizemos mais de um parâmetro. Por exemplo: passado uma frase ou palavra, quero saber quantas,de uma determinada letra, existem nela. Segue na Listatem 4 o código do método contador de letras:
public static int QtdLetra(this string palavra, char letra)
{
return palavra.Where(c => c.Equals(letra)).Count();
}
Listagem 4. Extension Method para contar letras
Veja que o segundo parâmetro não precisa conter a palavra this. O
método foi implementado utilizando LINQ aonde a aplicação da palavra
WHERE para um tipo string nos permite navegar no array de caracteres que
o forma.
Para utilizar-mos o QtdLetra, basta seguirmos a mesma tematica de adicionar a referencia e o namespace a classe utilizadora, mas notem que agora temos de passar um parâmetro obrigatório conforme a Figura 2 mostra:
![]()
Figura 2. Extension Method com mais de um parâmetro
Segue na Listagem 5 um exemplo básico da utilização do nosso novo método, criamos uma lista de string e colocamos alguns valores, depois percorremos essa lista analisando quantas letras O cada frase contem:
List<string> palavras = new List<string>
{
"Microsoft .Net Framework",
"Extensions Methods",
"Ouviram do Ipiranga as margens plácidas"
};
int cont = 0;
foreach (string s in palavras)
cont = s.QtdLetra('o');
/*Retornos:
[0]:3
[1]:2
[2]:1
*/
Listagem 5. Utilizando o Extension Method QtdLetra
4. Conclusão:
Acredito que depois desta pequena demonstração, seja possível ver a
facilidade e o poder que a utilização dos Extensions Methods pode trazer
aos códigos implementados. A possibilidade de utilização de métodos
como se fosse nátivos a tipos nátivos da framework abre um leque de
opções de novas funcionalidades.