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?
Antworten
Zu viele Anzeigen?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;
}
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?
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