Değer Türü Parametrelerini Geçirme (C# Programlama Kılavuzu)Passing Value-Type Parameters (C# Programming Guide)

Değer türünde bir değişken, verilerine bir başvuru içeren bir referans türü değişkenin aksine verilerini doğrudan içerir.A value-type variable contains its data directly as opposed to a reference-type variable, which contains a reference to its data. Değer türündeki bir değişkenin değer olarak bir yönteme geçirilmesi, değişkenin bir kopyasını yönteme aktarmak anlamına gelir.Passing a value-type variable to a method by value means passing a copy of the variable to the method. Yöntem içinde gerçekleşen parametredeki herhangi bir değişikliğin bağımsız değişken değişkeninde depolanan özgün verileri etkilemez.Any changes to the parameter that take place inside the method have no affect on the original data stored in the argument variable. Çağrılan yöntemin bağımsız değişkenin değerini değiştirmesini istiyorsanız, bunu ref veya anahtar kelimeyi kullanarak başvuruyla geçirmeniz gerekir.If you want the called method to change the value of the argument, you must pass it by reference, using the ref or out keyword. Ayrıca, değerin in değiştirilmeyeceğini garanti ederken kopyadan kaçınmak için referans olarak bir değer parametresi geçirmek için anahtar sözcüğü de kullanabilirsiniz.You may also use the in keyword to pass a value parameter by reference to avoid the copy while guaranteeing that the value will not be changed. Basitlik için aşağıdaki örnekler refkullanılır.For simplicity, the following examples use ref.

Değere Göre Değer Türleri GeçmePassing Value Types by Value

Aşağıdaki örnekte değer türü parametreleri değere göre geçen gösterir.The following example demonstrates passing value-type parameters by value. Değişken n yönteme değer olarak SquareItgeçirilir.The variable n is passed by value to the method SquareIt. Yöntem içinde gerçekleşen herhangi bir değişiklik değişkenin özgün değeri üzerinde hiçbir etkisi yoktur.Any changes that take place inside the method have no affect on the original value of the variable.

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

Değişken n bir değer türüdür.The variable n is a value type. Verilerini, değerini 5içerir.It contains its data, the value 5. Çağrıldığınızda, SquareIt içeriği n yöntem içinde kare parametre x, kopyalanır.When SquareIt is invoked, the contents of n are copied into the parameter x, which is squared inside the method. MainAncak, yöntemi daha n önce olduğu gibi SquareIt aradıktan sonra değeri aynıdır.In Main, however, the value of n is the same after calling the SquareIt method as it was before. Yöntem içinde gerçekleşen değişiklik yalnızca yerel değişkeni xetkiler.The change that takes place inside the method only affects the local variable x.

Referansa Göre Değer Türlerini GeçmePassing Value Types by Reference

Aşağıdaki örnek, bağımsız değişkenin parametre ref olarak geçirilmesi dışında, önceki örnekle aynıdır.The following example is the same as the previous example, except that the argument is passed as a ref parameter. Yöntemde değiştirildiğinde, x ntemel bağımsız değişkenin değeri değiştirilir.The value of the underlying argument, n, is changed when x is changed in the method.

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

Bu örnekte, geçirilen değer n değildir; bunun yerine, n bir referans geçirilir.In this example, it is not the value of n that is passed; rather, a reference to n is passed. Parametre x bir intdeğildir; bu durumda, bir int nreferanstır.The parameter x is not an int; it is a reference to an int, in this case, a reference to n. Bu nedenle, yöntem içinde kare olduğunda, x aslında ne x kare nolduğunu ifade eder, .Therefore, when x is squared inside the method, what actually is squared is what x refers to, n.

Değer Türlerini DeğiştirmeSwapping Value Types

Bağımsız değişkenlerin değerlerini değiştirmeye yaygın bir örnek, yönteme iki değişken ilerlediğiniz ve yöntemin içeriğini değiştirdiği bir takas yöntemidir.A common example of changing the values of arguments is a swap method, where you pass two variables to the method, and the method swaps their contents. Bağımsız değişkenleri başvuru yla takas yöntemine geçirmeniz gerekir.You must pass the arguments to the swap method by reference. Aksi takdirde, yöntem içindeki parametrelerin yerel kopyalarını değiştirirsiniz ve arama yönteminde herhangi bir değişiklik olmaz.Otherwise, you swap local copies of the parameters inside the method, and no change occurs in the calling method. Aşağıdaki örnek, sonsayı değerlerini değiştirir.The following example swaps integer values.

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

SwapByRef Yöntemi aradiğinizde, aşağıdaki ref örnekte gösterildiği gibi aramadaki anahtar sözcüğü kullanın.When you call the SwapByRef method, use the ref keyword in the call, as shown in the following example.

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

Ayrıca bkz.See also