none
Variável por valor e por referência RRS feed

  • Pergunta

  • Pessoal, estou aprendendo C# e fiquei com a seguinte dúvida: o que é variável por valor e por referência?

    As explicações que eu li são muito confusas e os exemplos mais ainda.

    Se puderem explicar com um exemplo simples, fico grato.

    terça-feira, 9 de janeiro de 2007 18:31

Respostas

  • Qd vc passa a variável por valor para um método ou função, o método que recebe essa variável recebe, na verdade, uma cópia dessa variável... Ou seja, se vc modificar a variável dentro desse método ou função, vc está modificando a cópia da variável... Qd a execução do método ou função terminar, a variável q foi passada por valor continuará igualzinha como ela estava antes do método ou função ter sido chamado...

    Já passando a variável por referência, vc está passando tipo um "ponteiro" para o endereço de memória que está aquela variável... Ou seja, se vc modificar a variável dentro do método ou função, a variável em si será alterada... O que faz com que, acabando a execução do método, se vc tiver alterado o valor da variável, o valor fora dessa função ou método será também alterado...

    Exemplo:

    private void button1_Click(object sender, EventArgs e)
    {
       int variavel = 0;
       PorValor(variavel);
       MessageBox.Show("Por valor = " + variavel.ToString());
       // Resultado = 0 porque foi passada uma cópia da variável pro método..
       PorReferencia(ref variavel);
       MessageBox.Show("Por referencia = " + variavel.ToString());
       // Resultado = 5 porque foi passada a referência da variável pro método..
    }
    private void PorValor(int x)
    {
       x = 5;
    }
    private void PorReferencia(ref int x)
    {
       x = 5;
    }
    terça-feira, 9 de janeiro de 2007 18:51
    Moderador
  • Rogério,

    quando uma função recebe no parâmetro uma variável por referência, significa que se o valor desta variável for alterada dentro da função, ao voltar o processamento para o ponto que chamou a função, o novo valor atríbuído estará valendo.

    Já quando uma função recebe como parâmetro uma variável por valor, se seu conteúdo for alterado dentro da função, a alteração só será válida dentro da função. Assim, quando o processamento voltar para o ponto de chamada da função, o valor da variável continuará o mesmo de antes da chamada.

     


    Ricardo Oneda
    http://oneda.mvps.org/blog

    terça-feira, 9 de janeiro de 2007 18:54
    Moderador

Todas as Respostas

  • Qd vc passa a variável por valor para um método ou função, o método que recebe essa variável recebe, na verdade, uma cópia dessa variável... Ou seja, se vc modificar a variável dentro desse método ou função, vc está modificando a cópia da variável... Qd a execução do método ou função terminar, a variável q foi passada por valor continuará igualzinha como ela estava antes do método ou função ter sido chamado...

    Já passando a variável por referência, vc está passando tipo um "ponteiro" para o endereço de memória que está aquela variável... Ou seja, se vc modificar a variável dentro do método ou função, a variável em si será alterada... O que faz com que, acabando a execução do método, se vc tiver alterado o valor da variável, o valor fora dessa função ou método será também alterado...

    Exemplo:

    private void button1_Click(object sender, EventArgs e)
    {
       int variavel = 0;
       PorValor(variavel);
       MessageBox.Show("Por valor = " + variavel.ToString());
       // Resultado = 0 porque foi passada uma cópia da variável pro método..
       PorReferencia(ref variavel);
       MessageBox.Show("Por referencia = " + variavel.ToString());
       // Resultado = 5 porque foi passada a referência da variável pro método..
    }
    private void PorValor(int x)
    {
       x = 5;
    }
    private void PorReferencia(ref int x)
    {
       x = 5;
    }
    terça-feira, 9 de janeiro de 2007 18:51
    Moderador
  • Rogério,

    quando uma função recebe no parâmetro uma variável por referência, significa que se o valor desta variável for alterada dentro da função, ao voltar o processamento para o ponto que chamou a função, o novo valor atríbuído estará valendo.

    Já quando uma função recebe como parâmetro uma variável por valor, se seu conteúdo for alterado dentro da função, a alteração só será válida dentro da função. Assim, quando o processamento voltar para o ponto de chamada da função, o valor da variável continuará o mesmo de antes da chamada.

     


    Ricardo Oneda
    http://oneda.mvps.org/blog

    terça-feira, 9 de janeiro de 2007 18:54
    Moderador
  • Obrigado pelas respostas.
    terça-feira, 9 de janeiro de 2007 19:17
  • Andre boa tarde,

    Entendi essa explicação em partes, qual seria um exemplo prático de usar um ou outro tipo? Poderia me citar um exemplo em um sistema?

    domingo, 24 de junho de 2012 18:28
  • Olá Rogério, tudo bem?

    Todo início de aprendizado pode gerar um pouco de confusão, porem, depois se torna simples.

    Para entender melhor sobre tipo de variável de Valor e Referência no C# leia o artigo:

    http://cavas.com.br/index.php/programacao/conceito-de-valor-e-referencia-no-c/

    Abraços e até mais,

    Marcelo Pereira Cavalini

    • Sugerido como Resposta Marcelo Cavalini quinta-feira, 22 de novembro de 2012 15:41
    quinta-feira, 22 de novembro de 2012 15:41