412 Stimmen

Unterschied zwischen ref- und out-Parametern in .NET

Was ist der Unterschied zwischen ref y out Parameter in .NET? In welchen Situationen kann der eine nützlicher sein als der andere? Was wäre ein Code-Schnipsel, bei dem einer verwendet werden kann und ein anderer nicht?

9voto

Krishna Thota Punkte 5843

Ref und Out Parameter:

En out et le ref Parameter werden verwendet, um Werte in dieselbe Variable zurückzugeben, die Sie als Argument einer Methode übergeben. Diese beiden Parameter sind sehr nützlich, wenn Ihre Methode mehr als einen Wert zurückgeben muss.

Sie müssen dem out-Parameter im Körper der Methode calee einen Wert zuweisen, sonst wird die Methode nicht kompiliert.


Referenzparameter : Sie muss initialisiert werden, bevor sie an die Methode übergeben wird. Die ref Schlüsselwort auf einen Methodenparameter bewirkt, dass eine Methode auf dieselbe Variable verweist, die als Eingabeparameter für dieselbe Methode übergeben wurde. Wenn Sie Änderungen an der Variable vornehmen, werden diese in die Variable übernommen.

int sampleData = 0; 
sampleMethod(ref sampleData);

Ex von Ref Parameter

public static void Main() 
{ 
 int i = 3; // Variable need to be initialized 
 sampleMethod(ref i );  
}

public static void sampleMethod(ref int sampleData) 
{ 
 sampleData++; 
} 

Out Parameter : Sie muss nicht initialisiert werden, bevor sie an die Methode übergeben wird. Die out kann verwendet werden, um die Werte in derselben Variablen zurückzugeben, die als Parameter der Methode übergeben wurde. Alle Änderungen am Parameter werden in der Variablen wiedergegeben.

 int sampleData; 
 sampleMethod(out sampleData);

Ex von Out Parameter

public static void Main() 
{ 
 int i, j; // Variable need not be initialized 
 sampleMethod(out i, out j); 
} 
public static int sampleMethod(out int sampleData1, out int sampleData2) 
{ 
 sampleData1 = 10; 
 sampleData2 = 20; 
 return 0; 
} 

7voto

Nazmul Hasan Punkte 9412

Aus:

In C# kann eine Methode nur einen Wert zurückgeben. Wenn Sie mehr als einen Wert zurückgeben möchten, können Sie das Schlüsselwort out verwenden. Der out-Modifikator gibt als Return-by-Reference zurück. Die einfachste Antwort ist, dass das Schlüsselwort "out" verwendet wird, um den Wert von der Methode zu erhalten.

  • Sie brauchen den Wert in der aufrufenden Funktion nicht zu initialisieren.
  • Sie müssen den Wert in der aufgerufenen Funktion zuweisen, sonst meldet der Compiler einen Fehler.

ref:

Wenn Sie in C# einen Werttyp wie int, float, double usw. als Argument an den Methodenparameter übergeben, wird dieser als Wert übergeben. Wenn Sie also den Parameterwert ändern, hat dies keine Auswirkungen auf das Argument im Methodenaufruf. Wenn Sie jedoch den Parameter mit dem Schlüsselwort "ref" markieren, wird dies in der aktuellen Variablen reflektiert.

  • Sie müssen die Variable initialisieren, bevor Sie die Funktion aufrufen.
  • Es ist nicht zwingend erforderlich, dem ref-Parameter in der Methode einen Wert zuzuweisen. Wenn Sie den Wert nicht ändern, warum müssen Sie ihn dann als "ref" kennzeichnen?

4voto

Patrick Punkte 86090

Ref-Parameter müssen nicht in der Funktion gesetzt werden, während out-Parameter vor dem Verlassen der Funktion an einen Wert gebunden werden müssen. Als out übergebene Variablen können auch an eine Funktion übergeben werden, ohne initialisiert zu werden.

4voto

Alan Punkte 44139

out gibt an, dass der Parameter ein Ausgabeparameter ist, d.h. er hat keinen Wert, bis er von der Methode explizit gesetzt wird.

ref gibt an, dass der Wert ein Verweis ist, der einen Wert hat und dessen Wert Sie innerhalb der Methode ändern können.

1voto

BlackWasp Punkte 4855

Das Schlüsselwort ref wird verwendet, um Werte per Verweis zu übergeben. (Dies schließt nicht aus, dass die übergebenen Werte Werttypen oder Referenztypen sind). Ausgabeparameter, die mit dem Schlüsselwort out angegeben werden, dienen der Rückgabe von Werten aus einer Methode.

Ein wesentlicher Unterschied im Code besteht darin, dass Sie den Wert eines Ausgabeparameters innerhalb der Methode festlegen müssen. Dies ist bei Ref-Parametern nicht der Fall.

Weitere Einzelheiten finden Sie unter http://www.blackwasp.co.uk/CSharpMethodParameters.aspx

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