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?

1voto

bdukes Punkte 144019

out Parameter werden von der aufgerufenen Methode initialisiert, ref Parameter werden vor dem Aufruf der Methode initialisiert. Deshalb, out Parameter werden verwendet, wenn Sie nur einen sekundären Rückgabewert benötigen, ref Parameter werden verwendet, um einen Wert zu erhalten und möglicherweise eine Änderung dieses Wertes zurückgeben (sekundär zum Hauptrückgabewert).

1voto

supercat Punkte 72939

Eine out Parameter ist ein ref Parameter mit einem speziellen Out() Attribut hinzugefügt. Wenn ein Parameter einer C#-Methode deklariert ist als out wird der Compiler verlangen, dass der Parameter geschrieben wird, bevor er gelesen werden kann und bevor die Methode zurückkehren kann. Wenn C# eine Methode aufruft, deren Parameter ein Out() Attribut, wird der Compiler zum Zweck der Entscheidung, ob er "undefinierte Variable"-Fehler meldet, so tun, als ob die Variable unmittelbar vor dem Aufruf der Methode geschrieben wird. Beachten Sie, dass andere .net-Sprachen nicht dieselbe Bedeutung des Attributs Out() Attribut, ist es möglich, dass der Aufruf einer Routine mit einem out lässt die betreffende Variable unberührt. Wenn eine Variable als out Parameter, bevor er definitiv zugewiesen wird, wird der C#-Compiler Code generieren, um sicherzustellen, dass er irgendwann gelöscht wird, bevor er verwendet wird, aber wenn eine solche Variable den Gültigkeitsbereich verlässt und wieder eintritt, gibt es keine Garantie, dass sie wieder gelöscht wird.

0voto

Jacob Proffitt Punkte 12454

Out und ref sind genau dasselbe, mit der Ausnahme, dass out-Variablen nicht initialisiert werden müssen, bevor man sie in den Abgrund schickt. Ich bin nicht so schlau, ich habe das aus der MSDN-Bibliothek abgekupfert :).

Die Bedeutung des Modifikators besteht darin, dass, wenn Sie die Referenz dieser Variablen in Ihrem Code ändern, out und ref dazu führen, dass die aufrufende Variable ebenfalls ihre Referenz ändert. Im folgenden Code ist die Variable ceo eine Referenz auf newGuy, sobald sie vom Aufruf von doStuff zurückkehrt. Ohne ref (oder out) würde der Verweis nicht geändert werden.

private void newEmployee()
{
    Person ceo = Person.FindCEO();
    doStuff(ref ceo);
}

private void doStuff(ref Person employee)
{
    Person newGuy = new Person();
    employee = newGuy;
}

0voto

casademora Punkte 63718

Diese _Die out und ref Paramerter in C#_ hat einige gute Beispiele.

Der grundlegende Unterschied besteht darin, dass out Parameter müssen bei der Übergabe nicht initialisiert werden, ref-Parameter hingegen schon.

0voto

Joel Coehoorn Punkte 377088

Ref wird wahrscheinlich an null ersticken, da es vermutlich erwartet, ein vorhandenes Objekt zu ändern. out erwartet null, da es ein neues Objekt zurückgibt.

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