Passaggio di parametri di tipi di valore (Guida per programmatori C#)
Una variabile associata a un tipo che rappresenta un valore contiene direttamente i dati, mentre una variabile associata a un tipo che rappresenta un riferimento contiene un riferimento ai dati.Passando una variabile di tipo di valore a un metodo dal valore significa passare una copia della variabile al metodo.Tutte le modifiche al parametro che si verificano nel metodo non hanno alcun effetto sui dati originali archiviati nella variabile di argomenti.Se si desidera che il metodo chiamato per modificare il valore del parametro, è necessario passarli per riferimento, utilizzando il riferimento o indietro parola chiave.Per semplicità, negli esempi che seguono viene utilizzata solo la parola chiave ref.
Passaggio di tipi di valore per valore
Nell'esempio che segue viene illustrato il passaggio di parametri associati a tipi che rappresentano un valore per valore.La variabile n viene passata per valore al metodo SquareIt.Eventuali modifiche apportate nel metodo non avranno alcun effetto sul valore originale della variabile.
class PassingValByVal
{
static void SquareIt(int x)
// The parameter x is passed by value.
// Changes to x will not affect the original value of x.
{
x *= x;
System.Console.WriteLine("The value inside the method: {0}", x);
}
static void Main()
{
int n = 5;
System.Console.WriteLine("The value before calling the method: {0}", n);
SquareIt(n); // Passing the variable by value.
System.Console.WriteLine("The value after calling the method: {0}", n);
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
/* Output:
The value before calling the method: 5
The value inside the method: 25
The value after calling the method: 5
*/
la variabile n è un tipo di valore.Contiene i dati, il valore 5.Quando si richiama SquareIt, il contenuto di n viene copiato nel parametro x, che viene elevato al quadrato all'interno del metodo.in Main, tuttavia, il valore di n è lo stesso dopo avere chiamato SquareIt metodo come era prima.La modifica eseguita nel metodo influisce solo sulla variabile locale x.
Passaggio di tipi di valore per riferimento
L'esempio seguente è lo stesso dell'esempio precedente, tranne per il fatto che l'argomento viene passato come ref parametro.Il valore dell'argomento sottostante, n, viene modificato quando x viene modificato nel metodo.
class PassingValByRef
{
static void SquareIt(ref int x)
// The parameter x is passed by reference.
// Changes to x will affect the original value of x.
{
x *= x;
System.Console.WriteLine("The value inside the method: {0}", x);
}
static void Main()
{
int n = 5;
System.Console.WriteLine("The value before calling the method: {0}", n);
SquareIt(ref n); // Passing the variable by reference.
System.Console.WriteLine("The value after calling the method: {0}", n);
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
/* Output:
The value before calling the method: 5
The value inside the method: 25
The value after calling the method: 25
*/
In questo esempio non viene passato il valore di n, ma solo un riferimento a n.Il parametro x non è di tipo int ma è un riferimento a un valore int, in questo caso un riferimento a n.Pertanto, quando x è quadrato nel metodo, cìò che è quadrato è quello x si riferisce, n.
Scambio di tipi di valore
Un esempio comune di modificare i valori degli argomenti è un metodo di scambio, dove si passano due variabili al metodo e il metodo scambia i relativi contenuti.È necessario passare argomenti al metodo di scambio per riferimento.In caso contrario, sostituire le copie locali dei parametri nel metodo e nessuna modifica si verifica nel metodo di chiamata.Nell'esempio seguente viene scambiata i valori Integer.
static void SwapByRef(ref int x, ref int y)
{
int temp = x;
x = y;
y = temp;
}
Quando si chiama SwapByRef il metodo utilizza, ref parola chiave nella chiamata, come illustrato nell'esempio seguente.
static void Main()
{
int i = 2, j = 3;
System.Console.WriteLine("i = {0} j = {1}" , i, j);
SwapByRef (ref i, ref j);
System.Console.WriteLine("i = {0} j = {1}" , i, j);
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
/* Output:
i = 2 j = 3
i = 3 j = 2
*/
Vedere anche
Riferimenti
Passaggio di parametri (Guida per programmatori C#)
Passaggio di parametri di tipi di riferimento (Guida per programmatori C#)