Passando parâmetros deTipo (C# guia de programação) para o Valor-
A tipo de valor variável contém seus dados diretamente, em oposição a uma tipo de referência variável, que contém uma referência a seus dados. Portanto, passar uma variável do tipo de valor para um método significa passar uma cópia da variável para o método. Quaisquer alterações para o parâmetro que ocorrem dentro do método não tem nenhum efeito nos dados originais, armazenados na variável. Se desejar que o método chamado para alterar o valor do parâmetro, você precisa passar por referência, usando o ref ou check-out palavra-chave. Para simplificar, os exemplos seguintes usam ref.
Exemplo
O exemplo a seguir demonstra o tipo de valor de passar parâmetros por valor. A variável n é passado por valor para o método SquareIt. Quaisquer alterações que ocorrem dentro do método não tem nenhum efeito no valor da variável original.
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
*/
A variável n, sendo um tipo de valor, contém os seus dados, o valor 5. Quando SquareIt é invocado, o conteúdo de n são copiados para o parâmetro x, que é elevado ao quadrado dentro do método. Em Main, no entanto, o valor de n é o mesmo, antes e depois de chamar o SquareIt método. Na verdade, a alteração que ocorre dentro do método não afeta somente a variável local x.
O exemplo a seguir é o mesmo do exemplo anterior, exceto para passar o parâmetro usando a ref palavra-chave. O valor do parâmetro é alterado após chamar o método.
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
*/
Neste exemplo, não é o valor de n que é passado; em vez disso, uma referência a n é passado. O parâmetro x não é um int; ele é uma referência a um int, neste caso, uma referência a n. Portanto, quando x é elevado ao quadrado dentro do método, o que realmente obtém quadrado é o que x refere-se a: n.
Um exemplo comum de alteração dos valores dos parâmetros passados é o Swap método, onde você passa duas variáveis, x e y, e ter o método para trocar o seu conteúdo. Você deve passar os parâmetros para o Swap método por referência; Caso contrário, você lidando com uma cópia local dos parâmetros dentro do método. A seguir está um exemplo da Swap usa fazer referência a parâmetros de método:
static void SwapByRef(ref int x, ref int y)
{
int temp = x;
x = y;
y = temp;
}
Quando você chamar esse método, use o ref palavra-chave na chamada, como este:
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
*/
Consulte também
Referência
Passando parâmetros (guia de programação de C#)
Passando parâmetros deTipo (guia de programação de C#) a referência-