Sdílet prostřednictvím


Předávání parametrů typu hodnoty (Příručka programování C#)

A Typ hodnoty proměnná obsahuje data přímo jako protiklad k Typ odkazu proměnné, která obsahuje odkaz na data.Předání hodnotou proměnné typu hodnoty metody znamená předáním kopie proměnné metody.Změny parametru, které uskuteční uvnitř metody mít žádný vliv na původní data uložená v proměnné argument.Pokud chcete změnit hodnotu parametru volané metody, se musí projít odkazem, použití ref nebo mimo klíčové slovo.Pro jednoduchost, použijte následující příklady ref.

Předávání typů hodnot podle hodnoty

Následující příklad ukazuje hodnotu typu předávání parametrů hodnotou.Proměnná n hodnota předaná metodě SquareIt.Všechny změny, které se uskuteční v metodě mít žádný vliv na původní hodnotu proměnné.

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
*/

Proměnná n je typ hodnoty.Obsahuje data, je hodnota 5.Při SquareIt je vyvoláno obsah n jsou zkopírovány do parametru x, který je uvnitř metody spolehlivosti.V Main, však hodnota n je stejná po volání SquareIt způsob, jak byl před.Změna, která se uskutečňuje uvnitř metody ovlivní pouze lokální proměnná x.

Typy hodnot předávání odkazem

Následující příklad je stejný jako v předchozím příkladu je předán argument jako ref parametr.Hodnota argumentu podkladové n, při změně x se změní v metodě.

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
*/

V tomto příkladu není hodnota n , je předán; spíše odkaz na n je předán.Parametr x není int; je odkaz na int, v tomto případě odkaz na n.Proto, když x spolehlivosti je uvnitř metody, co skutečně je spolehlivosti je co x odkazuje, n.

Záměna typy hodnot

Běžným příkladem změnou hodnot argumentů je odkládací metoda, kde předat dvě proměnné metoda a metoda swapy jejich obsah.Metoda odkládací musí předat argumenty odkazem.Zaměnit místní kopie parametry uvnitř metody a dojde k žádné změně ve volání metody.Následující příklad swapy celočíselné hodnoty.

static void SwapByRef(ref int x, ref int y)
{
    int temp = x;
    x = y;
    y = temp;
}

Při volání SwapByRef metodu použití ref klíčové slovo ve volání, jak ukazuje následující příklad.

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
*/

Viz také

Referenční dokumentace

Předávání parametrů (Příručka programování C#)

Předávání parametrů typu Reference (Příručka programování C#)

Koncepty

Příručka programování C#