Passage de paramètres de type valeur (Guide de programmation C#)
Une variable de type valeur contient directement les données, contrairement à une variable de type référence, qui contient une référence aux données. Passez une variable de type valeur à une méthode par valeur signifie passer une copie de la variable à la méthode. En se transforme en paramètre qui ont lieu dans la méthode n'ont aucune incidence sur les données d'origine stockées dans la variable d'arguments. Si vous souhaitez que la méthode appelée pour modifier la valeur du paramètre, vous devez le passer par référence, à l'aide de le mot clé de référence ou de. Par souci de simplicité, les exemples qui suivent utilisent ref.
Passage de types valeur par valeur
L'exemple suivant illustre le passage de paramètres de type valeur par valeur. La variable n est passée par valeur à la méthode SquareIt. Les modifications intervenant au sein de la méthode n'affectent en rien la valeur d'origine de la variable.
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
*/
n variable est un type valeur. il contient ses données, la valeur 5. Lorsque la méthode SquareIt est appelée, le contenu de la variable n est copié dans le paramètre x, qui est mis au carré au sein de la méthode. Dans Main, toutefois, la valeur d' n est identique après avoir appelé la méthode d' SquareIt comme initial. La modification qui a lieu à l'intérieur de la méthode affecte uniquement la variable locale x.
Passage de types valeur par référence
L'exemple suivant est identique à l'exemple précédent, mais que l'argument est passé comme paramètre d' ref . La valeur de l'argument sous-jacent, n, change lorsque x est modifié dans la méthode.
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
*/
Dans cet exemple, ce n'est pas la valeur de la variable n qui est passée, mais une référence de n. Le paramètre x n'est pas int ; il s'agit d'une référence à int, dans ce cas, une référence à n. Par conséquent, lorsque x est élevée au carré dans la méthode, ce qui est élevée au carré réellement ce qu' x fait référence, est n.
Permutation de types valeur
Un exemple courant de modifier les valeurs des arguments est une méthode d'échange, que vous passez deux variables à la méthode, et la méthode fait passer leur contenu. Vous devez passer des arguments à la méthode d'échange par référence. Sinon, vous permute les copies locales des paramètres dans la méthode, et aucune modification n'est effectuée dans la méthode. L'exemple suivant fait passer des valeurs entières.
static void SwapByRef(ref int x, ref int y)
{
int temp = x;
x = y;
y = temp;
}
Lorsque vous appelez la méthode d' SwapByRef , utilisez le mot clé d' ref dans l'appel, comme indiqué dans l'exemple suivant.
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
*/
Voir aussi
Référence
Passage de paramètres (Guide de programmation C#)
Passage de paramètres de type référence (Guide de programmation C#)