Início > C# > Dicas: C# 3.0/3.5 – Extension Methods and Extension Types.

Dicas: C# 3.0/3.5 – Extension Methods and Extension Types.

10 de outubro de 2009 Deixe um comentário Go to comments

Essa é uma dica muito legal, pois apesar de encontrar vários artigos/tutorias na internet falando de Extension Methods, ainda sinto que muitos desenvolvedores não implementam este grande recurso, pois é comum pegar projetos onde existem classes auxiliadoras que poderiam muito bem ser classes/métodos de extensão.

                Os métodos de extensão ou Extension Methods permitem ampliar a funcionalidade já existente em uma classe ou tipo, vamos a um exemplo para ficar mais claro.

1-) Crie um novo projeto no VS, do tipo Windows, com o nome de ExtesionMethods.

                -Para este exemplo eu já irei criar uma extension de uma das BCL em vez de criar uma classe e depois estender ela.

2-) Crie uma classe publica e estática no seu projeto com o nome de Extensions.

namespace ExtensionMethods

{

    public static class Extensions

    {

 

    }

}

 

3-) Para nosso exemplo, nós iremos implementar uma extensão da classe String, esta extensão sempre irá concatenar no final de uma string um texto que iremos definir. Este simples exemplo do extension methods, posteriormente você poderá brincar muito mais com o seu cenário.

Continuando, crie uma um método dentro da classe Extension conforme o exemplo abaixo:

public static string ConcatenaString(this string value)

{

            return value + " concatenando valor a string";

}

 

Note que a palavra chave para utilizar o método de extensão é a This, ou seja os extension method são declarados usando a keyword this como um modificador no primeiro parâmetro de um método, se no nosso exemplo tivéssemos this int value em vez de this string value, o método de extensão estaria disponível no tipo int.

Nota: Todos os métodos de extensão precisam estar declarados como métodos estáticos.

 

Para completar este nosso exemplo, dentro da sua classe Form1 crie um evento Load, caso não exista e dentro do Form1_Load  crie um váriavel do tipo string chamado valor01 e chame o mesmo na classe MessageBox, conforme exemplo abaixo.

        private void Form1_Load(object sender, EventArgs e)

        {

            string valor01 = "Novo valor";

            MessageBox.Show(valor01);

        }

Agora execute o projeto, perceba que o valor que irá aparecer na tela é “Novo valor”, até ai tudo bem, agora iremos chamar nosso método de extensão, este método pode ser acessado dentro dos métodos da string, para isso apenas coloque . (se estiver utilizando o VS) que o intellisense do VS já irá identificar o método.

private void Form1_Load(object sender, EventArgs e)

{

    string valor01 = "Novo valor";

     MessageBox.Show(valor01.ConcatenaString());

}

 

Execute o repare o projeto e repare que a saída agora será : Novo valor concatenando valor a string.

Agora iremos criar uma sobrecarga do método de extensão onde iremos dizer para ele que ele irá receber o parâmetro (string) que será concatenada. Veja:

public static string ConcatenaString(this string value, string valueConcat)

{

    return value + valueConcat;

}

 

Perceba que a diferença deste método é que não temos uma string fixa, esta é passada como um parâmetro. Na classe Form, iremos criar uma segunda variável do tipo string com o seguinte valor :

string valor02 = " concatenando com uma string – Exemplo 02";

 

E agora iremos chamar o método ConcatenaString passando o valor de valor02, note que ao chamar o ConcatenaString() o mesmo aparece uma sobrecarga.

Seu código deverá ficar da seguinte forma:

private void Form1_Load(object sender, EventArgs e)

{

    string valor01 = "Novo valor";

    string valor02 = " concatenando com uma string – Exemplo 02";

    MessageBox.Show(valor01.ConcatenaString(valor02));

}

 

Execute o projeto, agora a mensagem será : Novo valor concatenando com uma string – Exemplo”

Espero que essa dica seja útil, abraço..

Mais: http://msdn.microsoft.com/en-us/library/bb383977.aspx

 

Abraço,

 

Categorias:C#
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: