Aracılığıyla paylaş


Kağıt geçirme başvuru türü parametreleri (C# Programlama Kılavuzu)

Bir değişken bir Başvuru türü verilerini doğrudan; içermiyor Bu, verilere bir başvuru içerir.Değerine göre bir başvuru türü parametresi geçirdiğinizde, veri değeri olan bir sınıf üyesi gibi başvuruya göre sıralanmasını değiştirmek mümkündür.Ancak, başvuru değerini değiştiremezsiniz; diğer bir deyişle, yeni bir sınıf için bellek ayırır ve bu blok kalıcı aynı başvuru kullanamazsınız.Bunu yapmak için parametre kullanarak geçirmek ref veya dışarı anahtar sözcüğü.Kolaylık olması açısından, aşağıdaki örnekleri kullanın ref.

Değere göre iletme baþvuru türleri

Aşağıdaki örnek bir başvuru türü parametre iletilmesini gösterir arr, bir yöntem, değerine göre Change.Parametre bir başvuru olduğundan arr, dizi öğelerinin değerlerini değiştirmek mümkündür.Ancak, parametre yalnızca farklı bellek konumuna yeniden atama girişimi yöntemi içinde çalışır ve özgün değişken etkilemez arr.

class PassingRefByVal 
{
    static void Change(int[] pArray)
    {
        pArray[0] = 888;  // This change affects the original element.
        pArray = new int[5] {-3, -1, -2, -3, -4};   // This change is local.
        System.Console.WriteLine("Inside the method, the first element is: {0}", pArray[0]);
    }

    static void Main() 
    {
        int[] arr = {1, 4, 5};
        System.Console.WriteLine("Inside Main, before calling the method, the first element is: {0}", arr [0]);

        Change(arr);
        System.Console.WriteLine("Inside Main, after calling the method, the first element is: {0}", arr [0]);
    }
}
/* Output:
    Inside Main, before calling the method, the first element is: 1
    Inside the method, the first element is: -3
    Inside Main, after calling the method, the first element is: 888
*/

Yukarıdaki örnekte, dizi arr, bir başvuru türü olan geçirilir yöntemine ref parametresi.Böyle bir durumda, başvuru bir kopyasını gösterdiği için arr, yöntemine aktarýlýr.Çıktı yöntemi bir dizi öğesinin içeriği bu durumda geçmek olası olduğunu gösterir 1 için 888.Ancak, yeni bir bellek bölümünü kullanarak tahsis Yeni içinde işleci Change yöntemi yapar değişken pArray yeni bir dizi başvuru.Böylece, özgün dizi etkilemez sonra değişiklikleri arr, içinde oluşturulacağı Main.Aslında, bu örnekte, bir içinde iki dizi oluşturulan Main ve bir iç Change yöntemi.

Başvuruya göre iletme baþvuru türleri

Aşağıdaki örnek dışında önceki örnekte, aynı şey ref yöntemi üstbilgi ve arama anahtar sözcüğü eklenir.Yöntemde gerçekleşen değişiklikleri çağıran program orijinal değişkeni etkiler.

class PassingRefByRef 
{
    static void Change(ref int[] pArray)
    {
        // Both of the following changes will affect the original variables:
        pArray[0] = 888;
        pArray = new int[5] {-3, -1, -2, -3, -4};
        System.Console.WriteLine("Inside the method, the first element is: {0}", pArray[0]);
    }

    static void Main() 
    {
        int[] arr = {1, 4, 5};
        System.Console.WriteLine("Inside Main, before calling the method, the first element is: {0}", arr[0]);

        Change(ref arr);
        System.Console.WriteLine("Inside Main, after calling the method, the first element is: {0}", arr[0]);
    }
}
/* Output:
    Inside Main, before calling the method, the first element is: 1
    Inside the method, the first element is: -3
    Inside Main, after calling the method, the first element is: -3
*/

Yöntemin içinde gerçekleşen tüm değişiklikleri orijinal dizide etkiler Main.Yeniden aslında orijinal array kullanarak ayrılan new işleci.Bu nedenle, arama sonra Change yöntemi, herhangi bir başvuru için arr işaret içinde oluşturulan beş öğe dizi Change yöntemi.

İki dizeyi takas etme

Dizeleri değiştirme, başvuru türü parametreleri başvuruyla geçirme, iyi bir örnektir.Örneğin, iki dizeyi str1 ve str2, baþlangýç deðerlerine ayarlanýr Main ve geçirilen SwapStrings yöntemi tarafından değiştirilen parametre olarak ref anahtar sözcüğü.İki dizeyi yöntemi ve iç içinde takas Main de.

 class SwappingStrings
 {
     static void SwapStrings(ref string s1, ref string s2)
     // The string parameter is passed by reference.
     // Any changes on parameters will affect the original variables.
     {
         string temp = s1;
         s1 = s2;
         s2 = temp;
         System.Console.WriteLine("Inside the method: {0} {1}", s1, s2);
     }

     static void Main()
     {
         string str1 = "John";
         string str2 = "Smith";
         System.Console.WriteLine("Inside Main, before swapping: {0} {1}", str1, str2);

         SwapStrings(ref str1, ref str2);   // Passing strings by reference
         System.Console.WriteLine("Inside Main, after swapping: {0} {1}", str1, str2);
     }
 }
 /* Output:
     Inside Main, before swapping: John Smith
     Inside the method: Smith John
     Inside Main, after swapping: Smith John
*/

Bu örnekte, çağıran program değişkenleri etkilemek için başvuru tarafından geçirilen parametreleri gerekir.Siz kaldırırsanız, ref anahtar yöntemi başlığı ve yöntem çağrısında herhangi bir değişiklik çağıran program yerde götürür.

Dizeleri hakkında daha fazla bilgi için bkz: dize.

Ayrıca bkz.

Başvuru

Kağıt geçirme Parametreler (C# Programlama Kılavuzu)

Geçirerek dizileri kullanarak ref ve out (C# Programlama Kılavuzu)

ref (C# Reference)

Başvuru tipleri (C# Reference)

Kavramlar

C# Programlama Kılavuzu