2009-05-22 11 views
6

Etwas wie:Eine allgemeine kurze Anleitung zum Übergeben von Methodenparametern nach ref oder nach Wert (C#)?

  • , wenn der Wert der Variablen nach dem Methodenaufruf zurückgegeben werden:
  • wenn vor der Verwendung Methodenaufruf ref instanziiert werden kann
  • wenn instanziiert werden nicht benötigt verwenden, bevor der Anruf

  • , wenn der Wert der variablen für die Rückführung verwendet wird, zu entscheiden, oder Berechnen andere Werte aus dem Methodenaufruf ref nicht weder Gebrauch aus

Habe ich es richtig verstanden? Was ist deine kurze Richtlinie?

Antwort

0

nicht sicher, ob dies wirklich Ihre Frage zu beantworten, aber eine gute Nutzung der Wert durch ref vorbei (die out-Schlüsselwort) Ich habe ist gefunden ...

int i = 0; 

if (int.TryParse("StringRepresentation", out i) 
{ 
    // do something with i which has taken the value of a the previous successful TryParse 
} 
4

Für Werttypen:

  • Wenn Sie nur den Wert enthalten ist, verwenden wollen und nicht zu ändern, es in dem ursprünglichen Ort verwenden, um die Standard-Weiterleitungsverfahren (nach Wert)
  • Wenn Sie es in dem ursprünglichen Speicher ändern müssen, verwenden ref. Beispiel:

    int a = -3; 
    
    protected void EnsurePositiveValues(ref int value) 
    { 
        if (value < 0) 
         value = 0; 
    } 
    

Für Referenztypen:

  • Wenn Sie müssen nur die Instanz verwenden oder ändern sie das Standard-Passing-Verfahren verwenden (durch Bezugnahme, sollte „durch Referenzkopie“ genannt werden)
  • Wenn Sie in der Originalreferenz (neu) zuordnen müssen, verwenden Sie ref. Beispiel:

    User u = MembershipAPI.GetUser(312354); 
    
    protected void EnsureUser(ref User user) 
    { 
        if (user == null) 
         user = new User(); 
    } 
    
1

Sie müssen auch berücksichtigen, Wert und Referenztypen nehmen. Wenn Sie einen Referenztyp als Parameter an eine Methode übergeben, übergeben Sie den Zeiger Zeiger an die Variable. Das bedeutet, dass Sie innerhalb der Methode Änderungen an der Variablen vornehmen können und diese dem Code zur Verfügung stehen, der die Methode aufgerufen hat. Wenn Sie sie jedoch auf null setzen, setzen Sie den Zeiger nur auf null und die Variable bleibt intakt Methode kehrt zurück.