2009-05-22 9 views
6

Qualcosa di simile:Una linea guida generale per il passaggio dei parametri del metodo per riferimento o per valore (C#)?

  • se il valore della variabile, dopo la chiamata al metodo deve essere restituito:
  • se può essere un'istanza prima dell'uso chiamata al metodo ref
  • se non ha bisogno di essere istanziati prima che la chiamata utilizzare su

  • se il valore della variabile è utilizzato per la restituzione, decide o calcolare altri valori dalla chiamata metodo non usare ref né su

Ho ricevuto correttamente? Qual è la tua breve guida?

risposta

0

Non sono sicuro se questo è davvero rispondere alla tua domanda, ma un buon uso di passare un valore da ref (utilizzando la parola chiave out) che ho trovato è ...

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

Per i tipi di valore:

  • Se si desidera utilizzare il valore contenuto e non alterare nel luogo originale utilizzare il metodo predefinito di passaggio (in valore)
  • Se è necessario modificare in negozio originale, utilizzare rif. Esempio:

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

Per i tipi di riferimento:

  • Se è necessario utilizzare solo l'istanza o modificarla utilizzare il metodo di default che passa (con riferimento; dovrebbe essere chiamato "dalla copia di riferimento")
  • Se è necessario (ri) assegnare nel riferimento originale, utilizzare ref. Esempio:

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

È inoltre necessario prendere in considerazione i tipi di valore e di riferimento. Quando si passa un tipo di riferimento a un metodo come parametro, si passa il puntatore alla variabile. Ciò significa che all'interno del metodo è possibile apportare modifiche alla variabile e saranno disponibili per il codice che ha chiamato il metodo, tuttavia se lo si imposta su null, si imposta solo il puntatore su null e la variabile sarà intatta quando si metodo restituisce.

Problemi correlati