Passando parâmetros de tipo de valor (guia de programação translation from VPE for Csharp)

A tipo de valor variável contém seus dados diretamente ao contrário de um 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 têm nenhum efeito nos dados originais armazenados na variável.Se você deseja que o método chamado para alterar o valor do parâmetro, você terá que passar por referência, usando o ref or check-out palavra-chave.Para simplificar, os exemplos a seguir usam ref.

Exemplo

O exemplo a seguir demonstra o tipo de valor de passagem de parâmetros por valor.A variável n é passada para o método por valor SquareIt. Quaisquer alterações que ocorrem dentro do método não têm 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 seus dados, o valor 5. Quando SquareIt é chamado, o Sumário de n são copiados para o parâmetro x, que é elevado ao quadrado dentro do método. In Main, no entanto, o valor de n é o mesmo, antes e após a chamada a SquareIt método. Na verdade, a alterar que ocorre dentro do método não afeta somente a variável localx.

O exemplo a seguir é o mesmo que o exemplo anterior, exceto para o parâmetro usando o ref palavra-chave. O valor do parâmetro é alterado após a chamada do 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 para n é passado. O parâmetro x não é um int; ele é uma referência a um int, neste caso, uma referência ao n. Portanto, quando x é elevado ao quadrado dentro do método, o que realmente obtém quadrado é o que x refere-se ao: n.

Um exemplo comum de alteração dos valores de parâmetros passados é o Swap método, onde você passar duas variáveis, x e y, e ter o método troque seu Sumário. Você deve passar os parâmetros para o Swap método por referência; caso contrário, você irá esteja lidando com uma cópia local dos parâmetros dentro do método. A seguir é um exemplo do Swap método usa fazer referência a parâmetros:

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 telefonar, 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

Conceitos

Guia de Programação C#

Referência

Passando parâmetros (guia de programação translation from VPE for Csharp)

Passando parâmetros de tipo de referência (guia de programação translation from VPE for Csharp)