Avatar ·

Qual é a diferença entre as palavras-chave ref e out em C#?

Olá a todos! Comecei a estudar C# e me deparei com as palavras-chave `ref` e `out`. Eu entendo que ambas permitem modificar variáveis passadas dentro do método, mas não tenho clara a diferença entre elas. Aqui está um exemplo que escrevi: ```csharp public void TestRef(ref int x) { x = x * 2; } public void TestOut(out int x) { x = 10; } static void Main() { int a = 5; int b; // Erro: variável não inicializada para out TestRef(ref a); Console.WriteLine(a); // Imprime 10 TestOut(out b); Console.WriteLine(b); // Imprime 10 } ``` Percebi que com `out` não posso passar uma variável não inicializada sem erro, mas dentro do método eu a inicializo. Já com `ref` sou obrigado a inicializar a variável antes da chamada. Mas essa não é a única diferença, tenho certeza. Talvez haja outras nuances? Por exemplo, como isso afeta a performance, ou existem regras sobre quando usar cada um? Ficarei grato por uma explicação detalhada com exemplos.