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?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).
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.
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;
}
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.