No desenvolvimento de software em C#, a forma como passamos parâmetros para métodos pode afetar o comportamento da aplicação. Dois modificadores importantes nesse contexto são o ref e o out, que permitem passar argumentos por referência, em vez de por valor. Embora ambos compartilhem essa característica, há diferenças importantes entre eles. Neste post, vamos ver Ref e Out em C#, e entender as diferenças e como usar cada um adequadamente.

O que é o ref ?

O modificador ref é usado quando você deseja passar um parâmetro por referência e garantir que o método que o recebe possa tanto ler quanto modificar o valor da variável original. Para usar ref, o valor da variável deve ser inicializado antes de ser passado ao método.

Exemplo de uso com ref:

using System;

class Program
{
    static void Main(string[] args)
    {
        int numero = 10;
        Console.WriteLine($"Antes do método: {numero}"); // Exibe: 10
        
        // Chamando o método com ref
        ModificarValor(ref numero);

        Console.WriteLine($"Depois do método: {numero}"); // Exibe: 20
    }

    static void ModificarValor(ref int valor)
    {
        valor = 20;  // Modificando o valor passado
    }
}

Ponto importante sobre ref:

  • A variável deve ser inicializada antes de ser passada ao método que utiliza ref;

  • O método pode ler e modificar o valor da variável.

O que é o out?

O modificador out também é usado para passar um parâmetro por referência, mas com um propósito diferente. Com out, o método não precisa ler o valor original, apenas modificar o valor da variável e retornar o novo valor. A variável passada como out não precisa ser inicializada antes de ser passada ao método, mas deve ser inicializada dentro do método antes de ser usada.

Exemplo de uso com out:

using System;

class Program
{
    static void Main(string[] args)
    {
        int resultado;

        // Chamando o método com out
        CalcularAreaCirculo(5, out resultado);

        Console.WriteLine($"Área do círculo: {resultado}"); // Exibe a área calculada
    }

    static void CalcularAreaCirculo(int raio, out int area)
    {
        area = (int)(Math.PI * raio * raio); // Inicializando a variável dentro do método
    }
}

Ponto importante sobre out:

  • A variável não precisa ser inicializada antes de ser passada;

  • O método que utiliza out deve inicializar a variável antes de seu uso;

  • O objetivo principal de out é retornar dados através de parâmetros.

Exemplos

Utilizamos ref em métodos para tornar seus parâmetros referência para as variáveis originais:

class Calculadora {
    	
    public static void Dobro(int x) {
        	
        x = x * 2;
    }
}
    
 ...
    
int a = 10;
    
Calculadora.Dobro(a);
Console.WriteLine(a);

Neste caso a variável valerá 10. Isso acontece porque, quando o método terminar de executar, o valor 20 será apenas uma referência na memória (existirá apenas no escopo do método Calculadora) e não será atribuida a variável a:

memory main scope dobro scope

Para tornar x referência para a variável original a e mostrar corretamente o valor calculado, utilize a paravra-chave ref desta forma:

class Calculadora {
    	
  public static void Dobro(ref int x) {
        	
    x = x * 2;
  }
}
    
...
    
int a = 10;
    
Calculadora.Dobro(ref a);
Console.WriteLine(a);

Desta forma o valor apresentado na tela será 20.

Já a palavra-chave out faz o parâmetro ser uma referência para a variável original, sem a exigência que a variável original seja inicializada:

memory stack

Ficando desta forma:

class Calculadora {
    	
   public static void Dobro(int origem, out int result) {
        	
     result = origem * 2;
   }
}
    
 ...
    
int a = 10;
int dobro;
    
Calculadora.Dobro(a, out dobro);
Console.WriteLine(dobro);

Tanto o ref quanto o out são poderosos modificadores que permitem uma maior flexibilidade na passagem de parâmetros em métodos. O ref é ideal quando o valor de entrada precisa ser tanto lido quanto modificado, enquanto o out é perfeito para situações onde o foco é retornar um valor através de parâmetros. Agora que você conhece a diferença entre eles, poderá usá-los de forma eficiente em seus projetos C#!

Continue explorando mais dicas e truques sobre C# aqui no site para aprimorar suas habilidades!

Aprenda do zero ou aprimore seus conhecimentos em C#. Domine os conceitos de Orientação a Objetos e crie sistemas complexos integrados com banco de dados.

CONHEÇA O CURSO COMPLETO DE C# COM + DE 100 AULAS PRÁTICAS. Tenha acesso vitalício e certificado de conclusão.

CLIQUE NA IMAGEM ABAIXO E CONFIRA MAIS DETALHES:

CLIQUE AQUI E SAIBA MAIS

Dúvidas ou sugestões sobre Ref e Out em C#? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits

Tags: |

Quer receber GRÁTIS o e-book "Como Formatar um Computador em 5 Minutos"?

Não enviamos spam. Seu e-mail está 100% seguro!

Sobre o Autor

Bene Silva Júnior
Bene Silva Júnior

Bacharel em Sistemas de Informação pelo Instituto Paulista de Pesquisa e Ensino IPEP. Apaixonado por tecnologias e games do tempo da vovó!

0 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *