Aracılığıyla paylaş


ref (C# Reference)

ref Anahtar sözcüğünü bir değişken, değeri tarafından referansla neden olur.Arama yöntemi temel bağımsız değişkeninde herhangi bir yöntem parametresinde değişiklik yansıtılır başvuruyla geçirme etkisi olur.Başvuru parametresinin değeri her zaman temel bağımsız değişken değeri ile aynıdır.

[!NOT]

Kavramı, başvuru türü ile başvuru olarak geçirerek kavramını karıştırmayın.İki kavram aynı değildir.Bir yöntem parametresi tarafından değiştirilebilir ref bir deðer türü ya da baþvuru türü olup olmadığı dikkate alınmadan.Başvuruyla geçirildi, değer türünün hiçbir kutulama vardır.

Kullanmak için bir ref parametresi, hem yöntem tanımı ve çağırma yöntemi açıkça kullanması gerekir ref aşağıdaki örnekte gösterildiği gibi anahtar sözcüğü.

    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 kendisine geçirilen önce.Bu farklılık gösterir out parametreleri olan bağımsız değişkenler açıkça onlar geçirilmeden önce başlatılması gerekmez.Daha fazla bilgi için bkz: dışarı.

Bir sınıfın üyeleri yalnızca farklı imzalara sahip ref ve out.İki üye türü arasındaki tek fark, birinin ise onları sahip bir derleyici hatası oluşur bir ref ve diğer parametresi olan bir out parametresi.Örneğin, aşağıdaki kod derleme değildir.

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öntemi vardır, ancak, aşırı yükleme yapılabilir bir ref veya out ve diğer parametre olan bir değer parametre aşağıdaki örnekte gösterildiği gibi.

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

Gizleme veya geçersiz kılma, gibi imza eşleşen gerektiren diğer durumlarda ref ve out imza parçası olan ve birbiriyle eşleşmiyor.

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

Diziler geçişi hakkında daha fazla bilgi için bkz: Geçirerek dizileri kullanarak ref ve out (C# Programlama Kılavuzu).

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

  • Kullanarak tanımladığınız zaman uyumsuz yöntemleri zaman uyumsuz değiştirici.

  • Dahil Yineleyici yöntemleri bir dönüşünden veya yield break ifadesi.

Örnek

Önceki örnekler, değer türleri ile başvuru geçirildiğinde neler olduğunu gösterir.Ayrıca ref baþvuru türleri geçirmek için anahtar sözcük.Başvuruya göre başvuru türü geçirilirse, başvuru parametresi başvurduğu nesneyi değiştirmek çağrılan yöntem sağlar.Depolama konumu nesnesinin yöntemine başvuru parametresinin değeri geçirilir.Parametre depolama konumunu değiştirirseniz, temel alınan bağımsız depolama konumunu değiştirin.Aşağıdaki örnek bir başvuru türünün bir örneğini geçen bir ref parametresi.Başvuru türleri ve başvuru değeri tarafından geçişi hakkında daha fazla bilgi için bkz: Kağıt geçirme başvuru türü parametreleri (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 için bkz: C# dil belirtiminin. Dil belirtimi, C# sözdizimi ve kullanımı için nihai kaynaktır.

Ayrıca bkz.

Başvuru

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

Yöntem parametreleri (C# Reference)

C# anahtar sözcükler

Kavramlar

C# Programlama Kılavuzu

Diğer Kaynaklar

C# Başvurusu