Registrar   Login 
 
 C#    março 11, 2010
Artigos publicados Minimizar
07

Olá pessoal,

Desculpem a demora em atualizar nossa coluna. É que eu ando muito ocupado com os preparativos para o nascimento da minha filha, Ana Luisa, ainda este mês. Da reforma do apartamento à cortina do quarto do bebê, eu fiquei totalmente sem tempo para muitas coisas, inclusive para publicar novos artigos.

Nesta coluna trataremos da passagem de valores por referência em métodos, usando "out" e "ref".

A passagem de valor por referência é necessária quando estamos desenvolvendo um método e precisamos que o mesmo retorne dois ou mais valores. Assim, o nosso método altera os valores que lhe foram passados, por referência, e permite o retorno dos mesmos.

Escreveremos um exemplo simples, pois simples é o assunto em questão. Lembre-se, contudo, que a implementação usando passagem de valor por referência, deve ser usada com cautela. Se você necessitar que vários valores sejam retornados em um método, usar uma Struct seria bem mais recomendável.

De qualquer forma, o exemplo serve para ilustrar a passagem de valores, por referência, em métodos, usando "out" e "ref".

Vamos implementar uma classe, chamada ExemploREF_OUT, que possui dois métodos públicos: SplitNameOUT e SplitNameREF. Dê uma olhada no código abaixo:

class ExemploREF_OUT
{

    public void SplitNameOUT(string pNomeCompleto, out string Nome, out string Sobrenome)
    {
        string[] vPalavras = pNomeCompleto.Split(' ');
        int vQTDPalavras = vPalavras.Length - 1;
        Nome = vPalavras[0];
        Sobrenome = vPalavras[vQTDPalavras];
    }

    public void SplitNameREF(string pNomeCompleto, ref string Nome, ref string Sobrenome)
    {
        string[] vPalavras = pNomeCompleto.Split(' ');
        int vQTDPalavras = vPalavras.Length - 1;
        Nome = vPalavras[0];
        Sobrenome = vPalavras[vQTDPalavras];
    }
   
}

Estes dois métodos apenas "quebram" o nome completo da pessoa e retornam, respectivamente, o nome e o sobrenome da mesma. Vale ressaltar o uso da fantástica função Split. Ela simplifica bastante as coisas!

Veja que as diferenças entre os dois tipos de parâmetros são bem sutis. Na passagem utilizando out, não precisamos inicializar as variáveis que serão passadas. Já na passagem utilizando ref, somos obrigados a instanciá-las antes de passar o parâmetro. Caso o contrário, teremos erro na compilação.

Para tornar as coisas mais fáceis para os usuários menos experientes, eu escrevi uma pequena aplicação que faz uso da classe ExemploREF_OUT. Caso você prefira, poderá baixar o código fonte aqui. A aplicação foi escrita no Visual Studio 2008 e utiliza o .Net Framework 3.5.

Voltando ao cerne da nossa questão, como pode ser visto, os métodos SplitNameOUT e SplitNameREF fazem exatamente a mesma coisa. Contudo, de acordo com as boas práticas de programação, recomendo a utilização da passagem de parâmetro por referência do tipo OUT.

Até a próxima.

Comentários

Nenhum comentário até o momento. Seja o primeiro a deixar um.

Comente este artigo

Apenas usuários cadastrados podem postar comentários.
Imprimir  
 
 Copyright 2003-2010 - Ronaldo Cesar   Termos de Uso  Privacidade