417 Stimmen

Wann ist in vs. ref vs. out zu verwenden?

Neulich fragte mich jemand, wann er das Schlüsselwort "Parameter" verwenden sollte out anstelle von ref . Ich verstehe zwar (glaube ich) den Unterschied zwischen dem ref y out Schlüsselwörter (das war vorher gefragt ) und die beste Erklärung scheint zu sein, dass ref == in y out Was sind einige (hypothetische oder Code-) Beispiele, bei denen ich immer out und nicht ref .

Seit ref allgemeiner ist, warum wollen Sie überhaupt die out ? Ist es nur syntaktischer Zucker?

4voto

Saber Punkte 4515

Zusätzliche Hinweise zu C# 7:
In C# 7 ist es nicht nötig, Variablen mit out voranzustellen. Also ein Code wie dieser:

public void PrintCoordinates(Point p)
{
  int x, y; // have to "predeclare"
  p.GetCoordinates(out x, out y);
  WriteLine($"({x}, {y})");
}

Kann wie folgt geschrieben werden:

public void PrintCoordinates(Point p)
{
  p.GetCoordinates(out int x, out int y);
  WriteLine($"({x}, {y})");
}

Quelle: Was ist neu in C# 7.

0voto

Mr_Engineer Punkte 136

Es ist zu beachten, dass in ist ein gültiges Schlüsselwort ab C# ver 7.2 :

Der in-Parameter-Modifikator ist in C# 7.2 und höher verfügbar. Frühere Versionen erzeugen den Compilerfehler CS8107 ("Feature 'readonly references' is not available in C# 7.0. Bitte verwenden Sie Sprachversion 7.2 oder höher.") Um die Compiler-Sprachversion zu konfigurieren, siehe Wählen Sie die C#-Sprachversion.

...

Das Schlüsselwort in bewirkt, dass Argumente per Verweis übergeben werden. Es macht den formalen Parameter zu einem Alias für das Argument, das eine Variable sein muss. Mit anderen Worten: Jede Operation am Parameter wird am Argument durchgeführt. Es ist vergleichbar mit den Schlüsselwörtern ref oder out, mit dem Unterschied, dass in-Argumente von der aufgerufenen Methode nicht verändert werden können. Während ref-Argumente geändert werden können, müssen out-Argumente von der aufgerufenen Methode geändert werden, und diese Änderungen sind im aufrufenden Kontext zu beobachten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X