Uma das grandes novidades do .Net Framework 3.0 é os Extendions Methods com esse novo recurso é possível estender funcionalidade a qualquer objetos existente sem a necessidade de recopilar o objeto por exemplo você pode adicionar um método a um tipo string, um DataTable, um DataSet ,em fim a qualquer objeto.
Se você encontrar algum objeto que acredita que deveria ter uma funcionalidade qualquer basta adicionar essa funcionalidade , importante lembrar que esse recurso esta disponível a partir do .Net Framework 3.0 .
Todo Extension Methods em CSharp é estático(static) e deve estar em uma classe static também ,já em VB.NET é necessário criar um Module e adicionar um atributo a cada Extension Methods sinalizando que o método e um Extension , outro ponto importante também é que o primeiro argumento dos Extension Methods tem que ser o objeto que se quer estender funcionalidade .
Vamos ao exemplo vou adicionar uma funcionalidade ao tipo string , essa funcionalidade vai adicionar 3 asterisco no inicio e no fim do valor da string por exemplo se minha string conter o seguinte valor "Novo Recurso da Framework " o valor será alterado para "***Novo Recurso da Framework ***" e exibido na tela.
class Program
{
static void Main(string[] args)
{
string str = "Novo Recurso da Framework";
//Mostra o valor
Console.WriteLine(str);
//Utiliza o Extension Methods
str.MostraValor();
Console.ReadKey();
}
}
public static class Extension
{
public static void MostraValor(this string valor)
{
valor = valor.Insert(0, "***");
valor = valor.Insert(valor.Length, "***");
Console.WriteLine(valor);
}
}
Imports System.Runtime.CompilerServices
Module Module1
Sub Main()
Dim str As String = "Novo Recurso da Framework"
'Mostra o valor
Console.WriteLine(str)
'Utiliza o Extension Methods
str.MostraValor()
Console.ReadKey()
End Sub
End Module
Module Extension
<Extension()> Public Sub MostraValor(ByVal valor As String)
valor = valor.Insert(0, "***")
valor = valor.Insert(valor.Length, "***")
Console.WriteLine(valor)
End Sub
End Module
Código Fonte
Referências
http://msdn.microsoft.com/en-us/library/bb383977.aspx
http://blogs.msdn.com/vbteam/archive/2007/01/05/extension-methods-part-1.aspx
Daniel Fonseca Castro