Aracılığıyla paylaş


ref (C# Başvurusu)

ref Anahtar sözcük değerine göre başvuru tarafından iletilecek bağımsız değişken neden olur.Başvuru tarafından geçirerek çağrılan yöntemin parametresinde herhangi bir değişiklik arama yönteminde yansıtılır etkisidir.Örneğin, yerel bir değişken ifadesi veya bir dizi öğesi erişim ifadesi çağıran geçer ve çağrılan yöntemin ref parametresi başvurduğu nesne değiştirir, sonra yapanın yerel değişken veya dizi öğesi şimdi başvurun yeni nesneye.

[!NOT]

Kavramı, başvuru türleri ile başvuru tarafından geçirerek kavramı aynı şey değildir.İki kavramları aynı değil.Bir yöntem parametresi tarafından değiştirilebilir ref olsun, bir değer türü veya bir başvuru türü.Başvuru tarafından geçirildiğinde hiçbir paketleme değer türü yok.

Kullanılacak bir ref parametresi, yöntem tanımı hem çağıran yöntem açıkça kullanmalıdır ref anahtar sözcük, aşağıdaki örnekte gösterildiği gibi.

class RefExample
    {
        static void Method(ref int i)
        {
            // Rest the mouse pointer over i to verify that it is an int. 
            // The following statement would cause a compiler error if i 
            // were boxed as an object.
            i = i + 44;
        }

        static void Main()
        {
            int val = 1;
            Method(ref val);
            Console.WriteLine(val);

            // Output: 45
        }
    }

İçin geçirilen bağımsız değişken bir ref parametresi gerekir başlatılan, geçmeden önce.Bu farklı out parametreleri, Type bağımsız değişkenleri geçirilen önce açıkça başlatılması gerekmez.Daha fazla bilgi için kullanıma.

Bir sınıf üyeleri, yalnızca farklı imzalar olamaz ref ve out.Bir türün iki üyeleri arasındaki tek fark birinin ise bunları sahip bir derleyici hatası meydana bir ref parametresi ve diğer sahip bir out parametresi.Aşağıdaki kod, örneğin, derleme değil.

class CS0663_Example
{
    // Compiler error CS0663: "Cannot define overloaded  
    // methods that differ only on ref and out". 
    public void SampleMethod(out int i) { }
    public void SampleMethod(ref int i) { }
}

Bir yöntem sahip olduğunda ancak aşırı yapılabilir bir ref veya out parametresi ve diğer aşağıdaki örnekte gösterildiği gibi bir değer parametresini içeriyor.

class RefOverloadExample
    {
        public void SampleMethod(int i) { }
        public void SampleMethod(ref int i) { }
    }

İmza eşleşen gizleme veya geçersiz kılma, gibi gerektiren diğer durumlarda ref ve out imza parçasıdır ve birbirine eşleşmiyor.

Özellikleri değişkenleri değil.Yöntemler ve için geçirilemez ref parametreleri.

Diziler geçirilecek hakkında daha fazla bilgi için bkz: ref ve out Kullanarak Dizileri Geçirme (C# Programlama Kılavuzu).

Kullanamazsınız ref ve out için aşağıdaki yöntemleri tür anahtar sözcükler:

  • Zaman uyumsuz yöntemler, kullanarak tanımladığınız zaman uyumsuz değiştiricisi.

  • Dahil yineleyici yöntemleri, bir verecek return veya yield break bildirimi.

Örnek

Önceki örnekler değer türleri başvurusu tarafından geçirildiğinde neler olduğunu gösterir.Ayrıca ref başvuru türleri iletmek için anahtar sözcük.Bir başvuru türü tarafından başvuru geçirerek nesne başvurusu parametre başvurduğu arama yönteminde değiştirmek çağrılan yöntem sağlar.Nesnenin depolama konumu için yöntem başvuru parametresinin değeri geçirilir.Depolama konumu (yeni bir nesneye işaret edecek şekilde) parametresinin değeri değiştirirseniz, ayrıca, çağrıyı yapan başvurduğu depolama konumu değiştirebilirsiniz.Aşağıdaki örnek bir başvuru türünde bir örnek başarılı bir ref parametresi.Değer ve başvuru tarafından başvuru türleri geçirilecek hakkında daha fazla bilgi için bkz: Başvuru Türü Parametreleri Geçirme (C# Programlama Kılavuzu).

class RefExample2
{
    static void ChangeByReference(ref Product itemRef)
    {
        // The following line changes the address that is stored in   
        // parameter itemRef. Because itemRef is a ref parameter, the 
        // address that is stored in variable item in Main also is changed.
        itemRef = new Product("Stapler", 99999);

        // You can change the value of one of the properties of 
        // itemRef. The change happens to item in Main as well.
        itemRef.ItemID = 12345;
    }

    static void Main()
    {
        // Declare an instance of Product and display its initial values.
        Product item = new Product("Fasteners", 54321);
        System.Console.WriteLine("Original values in Main.  Name: {0}, ID: {1}\n",
            item.ItemName, item.ItemID);

        // Send item to ChangeByReference as a ref argument.
        ChangeByReference(ref item);
        System.Console.WriteLine("Back in Main.  Name: {0}, ID: {1}\n",
            item.ItemName, item.ItemID);
    }
}

class Product
{
    public Product(string name, int newID)
    {
        ItemName = name;
        ItemID = newID;
    }

    public string ItemName { get; set; }
    public int ItemID { get; set; }
}

// Output:  
//Original values in Main.  Name: Fasteners, ID: 54321 

//Back in Main.  Name: Stapler, ID: 12345

C# Dil Belirtimi

Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.

Ayrıca bkz.

Başvuru

Parametreleri Geçirme (C# Programlama Kılavuzu)

Yöntem Parametreleri (C# Başvurusu)

C# Anahtar Sözcükleri

Kavramlar

C# Programlama Kılavuzu

Diğer Kaynaklar

C# Başvurusu