Extension Members - Novidade do C# 14
Com o lançamento do C#, agora temos uma maneira mais clara e legível de definir métodos de extensão. Além disso, podemos também definir membros de extensão e métodos de extensão estáticos.
Abaixo está um exemplo de como definir métodos de extensão, membros de extensão e métodos de extensão estáticos:
static class PersonExtensions
{
extension(Person)
{
// método de extensão estático para clonar o objeto person, resetando as compras
public static Person Clone(Person person) => person with { Purchases = []};
// exemplo de uma operação de instância como extensão
public static Person operator +(Person basePerson, Person second) =>
basePerson with { Purchases = [ ..basePerson.Purchases, ..second.Purchases ]};
}
extension(Person person)
{
// exemplo de membro de extensão
public string FullName => $"{person.FisrtName} {person.LastName}";
// nova forma de definir métodos de extensão
public string GetFullName() => $"{person.FisrtName} {person.LastName}";
// extensão definindo operadores
public void operator += (Person toMerge) =>
person.Purchases.AddRange(toMerge.Purchases);
}
// a nova abordagem também é compatível com os métodos de extensão existentes
// ambas as abordagens podem coexistir
public static string GetFullNameOld(this Person person) =>
$"{person.FisrtName} {person.LastName}";
}
E como fica a chamada?
Simples e exatamente igual a métodos e membros que não são extensões:
// chamando um método de extensão (exatamente como antes do C# 14)
person.GetFullName();
// acessando um membro de extensão
person.FullName;
// chamando um método de extensão estático
var clone = Person.Clone(person);
Espero que tenha agregado!
Para mais conteúdos sobre .Net, C#, Azure e engenharia de software avançada, se inscreva:
https://www.youtube.com/@wilsonneto-swe/videos