Compartilhar via


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-

Conceitos

C# Programming Guide