none
palavre-chave ref é a mesma coisa que ponteiros em C++? RRS feed

  • Pergunta

  • Sempre pobteiro só existia na linguagem C++

    dai conheci a palavra-chave "ref" e vendo seu funcionamento, é idêntico ao ponteiro em C++

    dai curiosamente fui pesquisar no google sobre ponteiro e vi a seguinte sintaxe

    int* valor;

    que segundo o site, é um ponteiro (nao testei ainda)

    É a mesma coisa?

    porque 2 jeitos diferentes para apontar uma referência? tem alguma diferença de desempenho? na minha opinião, não faz sentido


    • Editado Yuri Schmitz quarta-feira, 13 de março de 2013 14:12
    quarta-feira, 13 de março de 2013 14:09

Respostas

  • Na verdade todo tipo que trabalha por referência no C# usa ponteiros, mas isso é transparente. A palavra chave ref serve para passar por referência tipos que nativamente trabalham por valor (scructs).

    Você também pode utilizar a palavra chave out, a diferença do out é que você pode passar um variável não inicializada para o método, o método deve inicializar essa variável e a alteração é refletida no local onde o método foi chamado.

    Exemplo:

            protected void btnSalvar_Click(object sender, EventArgs e)
            {
                int x;
                AlterarValor(ref x); //Erro: Variável não foi inicializada
                AlterarValor2(out x);  
            }
    
            void AlterarValor(ref int x)
            {
                x = 1;
            }
    
            void AlterarValor2(out int x)
            {
                x = 1;
            }
    Ou seja, você pode utilizar ref ou out para passar variáveis por referência, cada método tem sua particularidade;


    Spartans! Tonight we dine in Hell!

    quinta-feira, 14 de março de 2013 13:58

Todas as Respostas

  • E ae tuco, blz cara??

    Assim, a diferença é que uma referencia não pode ser manipulada diretamente.

    <span data-guid="85491a3de2da7f15020c46c165e91e3d" data-source="The ref keyword causes an argument to be passed by reference, not by value." id="mt1">"A palavra-chave de ref causa um argumento a ser passado por referência, não por valor. "

    Para entender variável do tipo referência e valor você vai ter que ler isto:

    http://msdn.microsoft.com/pt-br/library/vstudio/9t0za5es.aspx

    http://msdn.microsoft.com/pt-br/library/vstudio/s6938f28.aspx

    E por fim isto:

    http://msdn.microsoft.com/pt-br/library/vstudio/14akc2c7.aspx

    Sobre ponteiro:

    http://msdn.microsoft.com/pt-br/library/vstudio/y31yhkeb.aspx

    http://www.treinaweb.com.br/ler-artigo/25/ponteiros-em-c


    Se a resposta foi útil por favor qualifique! Janderson Candido de Mattos - MCPD

    quinta-feira, 14 de março de 2013 12:44
  • Na verdade todo tipo que trabalha por referência no C# usa ponteiros, mas isso é transparente. A palavra chave ref serve para passar por referência tipos que nativamente trabalham por valor (scructs).

    Você também pode utilizar a palavra chave out, a diferença do out é que você pode passar um variável não inicializada para o método, o método deve inicializar essa variável e a alteração é refletida no local onde o método foi chamado.

    Exemplo:

            protected void btnSalvar_Click(object sender, EventArgs e)
            {
                int x;
                AlterarValor(ref x); //Erro: Variável não foi inicializada
                AlterarValor2(out x);  
            }
    
            void AlterarValor(ref int x)
            {
                x = 1;
            }
    
            void AlterarValor2(out int x)
            {
                x = 1;
            }
    Ou seja, você pode utilizar ref ou out para passar variáveis por referência, cada método tem sua particularidade;


    Spartans! Tonight we dine in Hell!

    quinta-feira, 14 de março de 2013 13:58
  • Show, deu pra entender

    a palavra chave out passou por mim despercebido como referencia, associei na hora como um "multi" return de um metodo

    Valeu pessoal pelo esclarecimento

    sexta-feira, 15 de março de 2013 00:04