2016-09-22 1 views
-1

Ich habe Methoden studiert und ich bin über die "Ref" -Methode gestolpert. Allerdings scheinen beide Codes das gleiche zu erreichen:Was ist der Unterschied zwischen Ref-Parameter und Rückgabewert (Methoden)

class Program 
{ 
    static void Main(string[] args) 
    { 
     int number; 

     number = 5; 
     Console.WriteLine("Before method number= {0}", number); 

     AddThree (ref number); 

     Console.WriteLine("After method number={0}", number); 
     Console.ReadLine(); 

    } 

    private static void AddThree(ref int lol) //carbon copy....so int number= 5 here 
    { 
     lol = 3; 
     Console.WriteLine("inside method number={0}", lol); 


    } 


} 
} 

class Program 
{ 

    static void Main(string[] args) 
    { 

     int number; 
     int print; 


     number = 5; 
     Console.WriteLine("Before method number= {0}", number); 

     print =AddThree(number); 

     Console.WriteLine("After method number={0}", print); 
     Console.ReadLine(); 

    } 

    private static int AddThree(int lol) //carbon copy....so int number= 5 here 
    { 
     lol = 3; 
     Console.WriteLine("inside method number={0}", lol); 
     return lol; 


    } 


} 

} 

-

Gibt es ein Vorteil, dass ref Parameter hat über Rückgabewert? persönlich sehe ich keinen großen Unterschied ..

Antwort

6

Gibt es einen Vorteil, dass Ref-Parameter über Rückgabewert hat? persönlich sehe ich keinen großen unterschied.

Well typischerweise, ref verwendet, wenn es schon etwas anderes zurückgeführt werden - zum Beispiel für int.TryParse (die out verwendet, aber das ist ähnlich). C# unterstützt nur einen einzigen Wert zurückgibt, wenn Sie also zwei Ausgänge von einer Methode wollen, müssen Sie die Optionen aus:

  • out Parameter
  • ref Parameter
  • einen zusammengesetzten Wert zurückkehrend (wahrscheinlich häufiger in C# sein 7 mit ValueTuple)

Aber es gibt noch andere Unterschiede - wichtiger ist, Änderungen an der ref Parameter sind sichtbar sofort in te Effektivwerte zum Ändern der ursprünglichen Variablen. Das ist am einfachsten demonstriert, wenn Sie zwei ref Parameter Aliasing derselben Variablen:

using System; 

class Test 
{ 
    static void Main() 
    { 
     int x = 0; 
     RefTwo(ref x, ref x); 
    } 

    static void RefTwo(ref int a, ref int b) 
    { 
     Console.WriteLine(a); // 0 
     b = 5; 
     Console.WriteLine(a); // 5! 
    } 
} 

Oh, und als kleines Kuriosum, wenn Sie einen Teil-Methode „return“ ein Wert wollen, müssen Sie im Grunde ein ref Parameter wie Teilmethoden müssen sein.

Ich würde im Allgemeinen vermeiden ref Parameter, es sei denn, es gibt einen sehr klaren Vorteil. Sie machen die Interaktion meiner Ansicht nach komplizierter.

+0

Also sollte ich einfach bei Rückgabe Wert Methode über Ref bleiben? Rückkehr-Methode scheint mir logischer –

+0

Das 'zwei Ref' Teil brachte mich zum Lachen. – CSharpie

Verwandte Themen