Warum brauchen wir "out" Parameter?

8

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?

    
InfoLearner 29.11.2010, 11:01
quelle

4 Antworten

14

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.

    
Darin Dimitrov 29.11.2010, 11:03
quelle
3

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.

    
BenW 29.11.2010 11:03
quelle
3

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.

    
Jon Skeet 29.11.2010 11:06
quelle
0

2 Hauptunterschiede gibt es

  1. Anders als ref erwartet es nicht, dass die Variable initialisiert wird.
  2. Bei Verwendung von OUT ist die aufgerufene Funktion für die Zuweisung des Werts not callee verantwortlich.
RameshVel 29.11.2010 11:10
quelle

Tags und Links