Extension Methods em C#
Um método de extensão C# permite que os desenvolvedores ampliem a funcionalidade de um tipo existente sem criar um novo tipo derivado, recompilamento ou modificar o tipo original. C# método de extensão é um tipo especial de método estático que é chamado como se fosse um método de instância no tipo estendido. Neste artigo, criaremos uma biblioteca de classes e, em seguida, estenderemos sua funcionalidade a partir do código de chamada, implementando métodos de extensão em C#.
Método de extensão C
O método de extensão C# é um método estático de classe estática, onde o modificador “este” é aplicado ao primeiro parâmetro. O tipo do primeiro parâmetro será o tipo que é estendido.
Os métodos de extensão só estão no escopo quando você importa explicitamente o namespace para o seu código fonte com uma diretiva de uso.
Crie uma Biblioteca de Classes
Crie um projeto de Biblioteca de Classes em Visual Studio.
Adicione o seguinte código ao Class1. O Class1 tem dois métodos: Display e Print.
using System;
using System.Text;
namespace ClassLibExtMethod
{
public class Class1
{
public string Display()
{
return ("I m in Display");
}
public string Print()
{
return ("I m in Print");
}
}
}
Crie um aplicativo de chamada
Agora crie um aplicativo de console no Visual Studio usando o Novo Projeto. Selecione Arquivo > Projeto new > e selecione Visual C# e Aplicativo de console conforme mostrado abaixo.
Adicione a referência da biblioteca de classes criada anteriormente a este projeto.
Use o seguinte código e use o ClassLibExtMEthod.dll no seu namespace:
using System;
using System.Text;
using ClassLibExtMethod;
namespace ExtensionMethod1
{
public static class XX
{
public static void NewMethod(this Class1 ob)
{
Console.WriteLine("Hello I m extended method");
}
}
class Program
{
static void Main(string[] args)
{
Class1 ob = new Class1();
ob.Display();
ob.Print();
ob.NewMethod();
Console.ReadKey();
}
}
}
No código acima, você vê que há uma classe estática XX com um método, NewMethod. Se você notar, o NewMethod toma classe1 como parâmetro. É assim que você estende uma biblioteca existente e adiciona seus próprios métodos a ela. Agora, este Novo Método está disponível através da biblioteca de classes.
Quando você usa o Visual Studio Intellisense, você pode ver que o método de extensão é representado com uma seta (diferente do sinal de método normal), uma vez que eram métodos de instância no tipo estendido. Veja a figura abaixo:
A saída do programa anterior parece ser a seguinte.
Benefícios dos métodos de extensão
- Os métodos de extensão permitem que as classes existentes sejam estendidas sem depender da herança ou de ter que alterar o código-fonte da classe.
- Se a classe estiver lacrada do que não há no conceito de estender sua funcionalidade. Para isso, um novo conceito é introduzido, ou seja, métodos de extensão.
- Este recurso é importante para todos os desenvolvedores, especialmente se você quiser usar o dinamismo dos aprimoramentos C# no design da sua classe.
Mais trechos de código de métodos de expansão de extensão
using System;
using System.Text;
namespace ExtensionMethod2
{
public static class ExtMetClass
{
public static int IntegerExtension(this string str)
{
return Int32.Parse(str);
}
}
class Program
{
static void Main(string[] args)
{
string str = "123456";
int num = str.IntegerExtension();
Console.WriteLine("The output using extension method: {0}", num);
Console.ReadLine();
}
}
}
No programa anterior, usamos um método de extensão IntegerExtension() para converter uma string em um tipo numérico.
Pontos importantes para o uso de métodos de extensão
- Um método de extensão deve ser definido em uma classe estática de alto nível.
- Um método de extensão com o mesmo nome e assinatura como método de instância não será chamado.
- Os métodos de extensão não podem ser usados para substituir os métodos existentes.
- O conceito de métodos de extensão não pode ser aplicado a campos, propriedades ou eventos.
- O uso excessivo de métodos de extensão não é um bom estilo de programação.
Conclusão
Espero que este artigo o ajude a entender métodos de extensão em C# 3.0 ou superior. Se você quiser saber mais sobre métodos de extensão, aqui está outro caso de uso: Criar e Usar um Método de Extensão em C#