'VB.NET Imports System.Runtime.CompilerServices Imports System.Text.RegularExpressions Module Module1 Sub Main() Dim mail As String = "test@test.com" 'Chama método AlternateCase como uma extensão da variável mail Console.WriteLine("mail.AlternateCase: " & mail.AlternateCase) 'Chama o método sem ser uma extensão da variável Console.WriteLine("Extensions.AlternateCase(mail): " & Extensions.AlternateCase(mail)) 'Chama método IsValidEmailAddress como uma extensão da variável mail Console.WriteLine("mail.IsValidEmailAddress(): " & mail.IsValidEmailAddress) 'Chama o método sem ser uma extensão da variável Console.WriteLine("Extensions.IsValidEmailAddress(mail): " & Extensions.IsValidEmailAddress(mail)) 'Espera ação do usuário Console.Read() End Sub End Module Module Extensions <Extension()>_ Function AlternateCase(ByVal x As String) As String Dim b = False Dim SB As New System.Text.StringBuilder For Each c In x If b Then SB.Append(Char.ToUpper(c)) Else SB.Append(Char.ToLower(c)) End If b = Not b Next Return SB.ToString End Function <Extension()>_ Function IsValidEmailAddress(ByVal x As String)As Boolean Dim regex As Regex = New Regex("^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$") Return regex.IsMatch(x) End Function End Module
//C# using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.CompilerServices; using System.Text.RegularExpressions; namespace ExtensionCSharp { class Program { static void Main(string[] args) { String mail = "test@test.com"; //Chama método AlternateCase como uma extensão da variável mail Console.WriteLine("mail.AlternateCase(): " + mail.AlternateCase()); //Chama o método sem ser uma extensão da variável Console.WriteLine("Extensions.AlternateCase(mail): " + Extensions.AlternateCase(mail)); //Chama método IsValidEmailAddress como uma extensão da variável mail Console.WriteLine("mail.IsValidEmailAddress(): " + mail.IsValidEmailAddress()); //Chama o método sem ser uma extensão da variável Console.WriteLine("Extensions.IsValidEmailAddress(mail): " + Extensions.IsValidEmailAddress(mail)); //Espera ação do usuário Console.Read(); } } public static class Extensions { public static String AlternateCase(this String x) { Boolean b = false; StringBuilder SB = new StringBuilder(); foreach(Char c in x) { if (b) SB.Append(Char.ToUpper(c)); else SB.Append(Char.ToLower(c)); b = !b; } return SB.ToString(); } public static bool IsValidEmailAddress(this String x) { Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$"); return regex.IsMatch(x); } } }
Você irá ver que os Extension Methods aparecem com um ícone diferente(flecha azul apontando para baixo) para diferenciá-los dos métodos instanciados pela classe.
As vantagens em usar Extension Methods é que ele permite adicionar funcionalidades para o tipo que você deseja customizar sem que você quebre o código de aplicações já existentes. Você pode estender interfaces padrões com métodos adicionais sem alterar fisicamente a biblioteca de classes existentes.
No próximo post, pretendo mostrar outras vantagens de utilizar Extension Methods e também mostrar um macete para utilizá-lo em projetos com o .Net Framework 2.0
Para baixar a solução completa deste exemplo clique aqui (VS2008).
Até a próxima...
Comments (0)
Postar um comentário