Resumo : neste tutorial, você aprenderá sobre os métodos de extensão C# e como usá-los para estender qualquer tipo com métodos adicionais.
Introdução aos métodos de extensão C#
Para adicionar um método a uma classe , geralmente criamos uma subclasse da classe existente e adicionamos o método à classe derivada.
C# introduziu um novo recurso chamado métodos de extensão que permite adicionar novos métodos a um tipo (ou classe) existente sem a necessidade de usar herança .
Um método de extensão é um método estático , mas é chamado como se fosse um método de instância no tipo estendido.
Criando métodos de extensão C#
Para criar um método de extensão, você define uma classe estática que contém o método de extensão. Por exemplo, o seguinte cria um método de extensão no string
tipo:
using System.Globalization;
static class StringExtensions
{
public static string ToTitleCase(this string value)
{
return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(value);
}
}
Linguagem de código: JavaScript ( javascript )
Como funciona.
- Primeiro, defina a classe estática chamada
StringExtensions
. - Segundo, defina o método de extensão
ToTitleCase()
como um método estático daStringExtensions
classe. O método de extensão usathis
palavra-chave antes do primeiro parâmetro. Neste exemplo, oToTitleCase()
método usa as informações de texto da cultura atual para converter uma string em maiúsculas e minúsculas.
Usando métodos de extensão C#
O programa a seguir demonstra como chamar o ToTitleCase()
método de extensão em uma string:
using System.Globalization;
static class StringExtensions
{
public static string ToTitleCase(this string value)
{
return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(value);
}
}
class Program
{
public static void Main(string[] args)
{
var message = "C# extension methods are cool";
var result = message.ToTitleCase();
Console.WriteLine(result);
}
}
Linguagem de código: JavaScript ( javascript )
Saída:
C# Extension Methods Are Cool
Linguagem de código: PHP ( php )
Um exemplo mais prático do método de extensão C#
O exemplo a seguir demonstra como usar métodos de extensão para estender o tipo int adicionando dois métodos IsEven()
e IsOdd()
:
static class IntExtensions
{
public static bool IsEven(this int value)
{
return value % 2 == 0;
}
public static bool IsOdd(this int value)
{
return !IsEven(value);
}
}
class Program
{
public static void Main(string[] args)
{
int[] numbers = { 3, 5, 6, 2, 7, 8 };
foreach (var number in numbers)
{
if (number.IsEven())
{
Console.WriteLine(number);
}
}
}
}
Linguagem de código: PHP ( php )
Saída:
6
2
8
Neste exemplo, o IsEven()
método retorna true
se o número for par e false
caso contrário. O IsOdd()
método é o inverso do IsEven()
método.
No Main()
método da Program
classe, definimos uma lista de inteiros, iteramos sobre seus elementos usando foreach e escrevemos o número par no console. Usamos o IsEven()
método de extensão para verificar se um número é par ou não.
Vantagens dos métodos de extensão C#
Os métodos de extensão têm as seguintes vantagens:
- Permite adicionar funcionalidade aos tipos que você não controla, como classes .NET, sem a necessidade de subclassificá-los.
- Torne seu código mais limpo e legível, mantendo os métodos relacionados em um só lugar.
- Melhor descoberta: ao trabalhar com um objeto, você pode encontrar todos os seus métodos de extensão por meio do IntelliSense.
A imagem a seguir mostra os métodos de extensão disponíveis ( IsEven
& IsOdd
) do tipo inteiro que definimos no exemplo anterior:
Resumo
- Os métodos de extensão C# permitem estender um tipo existente sem usar herança.