Przekazywanie parametrów typu wartość (Przewodnik programowania w języku C#)
A Typ wartości zmienna zawiera dane bezpośrednio w przeciwieństwie do Typ odwołania zmienną, która zawiera odwołanie do swoich danych.Przekazanie zmiennej typu wartości do metody przez wartość oznacza przekazując kopię zmiennej do metody.Zmiany do parametru, które wypadają wewnątrz metody mają nie wpływa na oryginalne dane przechowywane w zmiennej argument.Chcąc nazywane metodę, aby zmienić wartość parametru, musi przekazać je przez odniesienie, przy użyciu ref lub z słowa kluczowego.Dla uproszczenia, w następujących przykładach użyto ref.
Typy wartości przechodzącej przez wartość
W poniższym przykładzie zademonstrowano typ wartości przekazywania parametrów przez wartość.Zmienna n jest przekazywany przez wartość do metody SquareIt.Wszelkie zmiany, które wypadają wewnątrz metody mają nie wpływa na pierwotną wartość zmiennej.
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
*/
Zmienna n jest typ wartości.Zawiera jej dane wartości 5.Gdy SquareIt jest wywoływany, zawartość n są kopiowane do parametru x, który jest kwadrat wewnątrz metody.W Main, jednak wartość n jest taka sama, po wywołaniu SquareIt metody w postaci, w jakiej był przed.Zmiana, która ma miejsce wewnątrz metody wpływa tylko na lokalne zmiennej x.
Typy wartości przechodzącej przez odwołanie
Poniższy przykład jest taki sam, jak w poprzednim przykładzie, z wyjątkiem, że argument jest przekazywany jako ref parametru.Wartość argumentu podstawowej, n, gdy zostanie zmieniona x zostanie zmieniona w metodzie.
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
*/
W tym przykładzie nie jest wartością n jest przekazywana; raczej odniesienie do n jest przekazywana.Parametr x nie jest int; jest odwołaniem do int, w tym przypadku odniesienie do n.Dlatego też, gdy x jest kwadrat wewnątrz metody, co faktycznie jest kwadrat jest co x odnosi się do n.
Zamiana typów wartości
Typowym przykładem zmiany wartości argumentów jest metoda wymiany, jeżeli dwie zmienne są przekazywane do metody i metoda zamienia ich zawartość.Argumenty muszą przekazać do metody swap, przez odniesienie.W przeciwnym razie swap lokalne kopie parametrów wewnątrz metody i nastąpi zmiana nie wywoływania metody.Poniższy przykład zamienia wartości całkowitych.
static void SwapByRef(ref int x, ref int y)
{
int temp = x;
x = y;
y = temp;
}
Gdy wywołanie SwapByRef metodę, użyj ref słowa kluczowego w wywołaniu, jak pokazano w poniższym przykładzie.
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
*/
Zobacz też
Informacje
Przekazywanie parametrów (Przewodnik programowania w języku C#)
Przekazywanie parametrów typu odwołanie (Przewodnik programowania w języku C#)