Ich verstehe, dass "out" genau wie "ref" -Typen sind, außer dass out-Variablen nicht initialisiert werden müssen. Gibt es noch andere Verwendungen von "out" -Parametern? Manchmal sehe ich ihre Verwendung in Callback-Methoden, aber ich habe nie verstanden, wie sie tatsächlich funktionieren oder warum wir sie anstelle von globalen Level-Ref-Variablen brauchen?
out
-Parameter erzwingen den Vertrag zwischen dem Aufrufer und dem Aufgerufenen (die aufgerufene Funktion), indem explizit angegeben wird, dass der Aufgerufene sie initialisiert. Andererseits wissen wir bei der Verwendung von ref
-Parametern nur, dass der Angerufene sie ändern könnte, aber es liegt in der Verantwortung des Aufrufers, sie zu initialisieren.
Eines der größten Beispiele sind die TryParse-Methoden, mit denen Sie prüfen können, ob etwas konvertiert werden kann. Wenn es konvertiert werden kann, möchten Sie normalerweise den konvertierten Wert. Andernfalls ist es nur eine andere Möglichkeit, Objekte an die aufrufende Methode zurückzugeben.
Warum möchten Sie etwas in der aufrufenden Methode initialisieren müssen, ohne dass sichergestellt ist, dass die aufgerufene Methode die Variable selbst überschreibt, wenn die Methode normal ausgeführt wird? Das sind die Vorteile, die Ihnen out
-Parameter bieten.
Grundsätzlich denke ich an out
Parameter als "oops, ich muss mehr als einen Wert zurückgeben" Indikatoren. Ich würde es vorziehen, Tupel selbst zu verwenden, aber natürlich haben sie es nur in .NET 4 geschafft ... und ohne explizite Sprachunterstützung sind sie etwas unpraktischer zu verwenden, als es ideal wäre.
Tags und Links c#