Quelle est la différence entre les mots-clés ref et out en C# ?
Bonjour à tous ! J'ai commencé à apprendre C# et je suis tombé sur les mots-clés `ref` et `out`. Je comprends qu'ils permettent tous deux de modifier les variables passées à l'intérieur d'une méthode, mais la différence entre eux ne m'est pas tout à fait claire.
Voici un exemple que j'ai écrit :
```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; // Erreur : variable non initialisée pour out
TestRef(ref a);
Console.WriteLine(a); // Affiche 10
TestOut(out b);
Console.WriteLine(b); // Affiche 10
}
```
J'ai remarqué qu'avec `out`, je ne peux pas passer une variable non initialisée sans erreur, mais dans la méthode je l'initialise. Avec `ref`, je suis obligé d'initialiser la variable avant l'appel. Mais ce n'est pas la seule différence, j'en suis sûr.
Y a-t-il d'autres subtilités ? Par exemple, comment cela affecte-t-il les performances, ou y a-t-il des règles sur quand utiliser quoi ? Je serais reconnaissant pour une explication détaillée avec des exemples.