Avatar ·

¿Cuál es la diferencia entre las palabras clave ref y out en C#?

¡Hola a todos! Empecé a estudiar C# y me encontré con las palabras clave `ref` y `out`. Entiendo que ambas permiten modificar las variables pasadas dentro del método, pero no me queda clara la diferencia entre ellas. Aquí hay un ejemplo que escribí: ```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; // Error: variable no inicializada para out TestRef(ref a); Console.WriteLine(a); // Muestra 10 TestOut(out b); Console.WriteLine(b); // Muestra 10 } ``` Noté que con `out` no puedo pasar una variable no inicializada sin error, pero en el método la inicializo. Y con `ref` estoy obligado a inicializar la variable antes de la llamada. Pero esta no es la única diferencia, estoy seguro. ¿Quizás hay otras sutilezas? Por ejemplo, ¿cómo afecta esto al rendimiento, o hay reglas sobre cuándo usar cada una? Agradecería una explicación detallada con ejemplos.