Bağımsız Değişkenleri Değere ve Başvuruya Göre Geçirme (Visual Basic)

Visual Basic'te bir bağımsız değişkeni bir yordama değere veya başvuruya göre geçirebilirsiniz. Bu geçiş mekanizması olarak bilinir ve yordamın çağıran kodda bağımsız değişkenin temel alınan programlama öğesini değiştirip değiştiremeyeceğini belirler. Yordam bildirimi, ByVal veya ByRef anahtar sözcüğünü belirterek her parametre için geçiş mekanizmasını belirler.

Farklılık -lar

Bir bağımsız değişkeni bir yordama geçirirken, birbiriyle etkileşim kuran birkaç farklı ayrım olduğunu unutmayın:

  • Temel alınan programlama öğesinin değiştirilebilir mi yoksa değiştirilemez mi olduğu

  • Bağımsız değişkenin değiştirilebilir mi yoksa değiştirilemez mi olduğu

  • Bağımsız değişkenin değere göre mi yoksa başvuruya göre mi geçirildiği

  • Bağımsız değişken veri türünün bir değer türü mü yoksa başvuru türü mü olduğu

Daha fazla bilgi için bkz . Değiştirilebilir ve Değiştirilemeyen Bağımsız Değişkenler Arasındaki Farklar ve Bağımsız Değişkeni Değere ve Başvuruya Göre Geçirme Arasındaki Farklar.

Geçiş Mekanizması Seçimi

Her bağımsız değişken için geçiş mekanizmasını dikkatli bir şekilde seçmelisiniz.

  • Koruma. İki geçiş mekanizması arasında seçim yaparken en önemli ölçüt, değişken çağırmanın değişip değişmemesidir. Bağımsız değişken geçirmenin avantajı, yordamın bu bağımsız değişken ByRef aracılığıyla çağıran koda bir değer döndürebilmenizdir. Bağımsız değişkeni ByVal geçirmenin avantajı, bir değişkeni yordam tarafından değiştirilmeye karşı korumasıdır.

  • Performans. Geçiş mekanizması kodunuzun performansını etkileyebilir, ancak fark genellikle önemsizdir. Bunun bir özel durumu, geçirilen ByValbir değer türüdür. Bu durumda, Visual Basic bağımsız değişkenin tüm veri içeriğini kopyalar. Bu nedenle, bir yapı gibi büyük bir değer türü için geçirmek daha verimli ByRefolabilir.

    Başvuru türleri için yalnızca veri işaretçisi kopyalanır (32 bit platformlarda dört bayt, 64 bit platformlarda sekiz bayt). Bu nedenle, performansa zarar vermeden tür String veya Object değere göre bağımsız değişkenleri geçirebilirsiniz.

Geçiş Mekanizmasının Belirlenmesi

Yordam bildirimi, her parametre için geçiş mekanizmasını belirtir. Çağıran kod bir ByVal mekanizmayı geçersiz kılamaz.

ile bir parametre bildirilirse ByRef, çağıran kod bağımsız değişken adını çağrısında parantez içine alarak mekanizmayı ByVal zorlayabilir. Daha fazla bilgi için bkz . Nasıl yapılır: Bağımsız Değişkeni Değere Göre Geçirilmeye Zorlama.

Visual Basic'te varsayılan değer, bağımsız değişkenleri değere göre geçirmektir.

Bağımsız Değişken Değere Göre Geçirildiğinde

  • Bağımsız değişkenin temel aldığı çağıran kod öğesi değiştirilemez bir öğeyse, karşılık gelen ByVal parametresini bildirin. Değiştirilemez bir öğenin değerini hiçbir kod değiştiremez.

  • Temel alınan öğe değiştirilebilirse ancak yordamın değerini değiştirebilmesini istemiyorsanız parametresini ByValbildirin. Değer tarafından geçirilen değiştirilebilir öğenin değerini yalnızca çağıran kod değiştirebilir.

Başvuruya Göre Bağımsız Değişken Geçirme Zamanları

  • Yordamın, çağıran koddaki temel öğeyi değiştirmesi için orijinal bir gereksinimi varsa, karşılık gelen ByRef parametresini bildirin.

  • Kodun doğru yürütülmesi, çağıran koddaki temel öğeyi değiştiren yordama bağlıysa parametresini ByRefbildirin. Değere göre geçirirseniz veya çağıran kod bağımsız değişkeni parantez içine alarak geçirme mekanizmasını geçersiz kılarsa ByRef , yordam çağrısı beklenmeyen sonuçlara neden olabilir.

Örnek

Açıklama

Aşağıdaki örnek, bağımsız değişkenlerin değere göre ne zaman geçirilip geçirilip geçirileceðini gösterir. Yordamın Calculate hem hem ByVal de parametresi vardır ByRef . Bir faiz oranı ve ratepara toplamı verildiğinde yordamın görevi, debtfaiz oranını özgün değerine uygulamanın sonucu olan için yeni bir değer debtdebthesaplamaktır. Bir debtByRef parametre olduğundan, yeni toplam, öğesine karşılık gelen debtçağıran koddaki bağımsız değişkenin değerine yansıtılır. Parametresi rate bir ByVal parametredir çünkü Calculate değerini değiştirmemelidir.

Kod

Module Module1

    Sub Main()
        ' Two interest rates are declared, one a constant and one a 
        ' variable.
        Const highRate As Double = 12.5
        Dim lowRate = highRate * 0.6

        Dim initialDebt = 4999.99
        ' Make a copy of the original value of the debt.
        Dim debtWithInterest = initialDebt

        ' Calculate the total debt with the high interest rate applied.
        ' Argument highRate is a constant, which is appropriate for a 
        ' ByVal parameter. Argument debtWithInterest must be a variable
        ' because the procedure will change its value to the calculated
        ' total with interest applied.
        Calculate(highRate, debtWithInterest)
        ' Format the result to represent currency, and display it.
        Dim debtString = Format(debtWithInterest, "C")
        Console.WriteLine("What I owe with high interest: " & debtString)

        ' Repeat the process with lowRate. Argument lowRate is not a 
        ' constant, but the ByVal parameter protects it from accidental
        ' or intentional change by the procedure. 

        ' Set debtWithInterest back to the original value.
        debtWithInterest = initialDebt
        Calculate(lowRate, debtWithInterest)
        debtString = Format(debtWithInterest, "C")
        Console.WriteLine("What I owe with low interest:  " & debtString)
    End Sub

    ' Parameter rate is a ByVal parameter because the procedure should
    ' not change the value of the corresponding argument in the 
    ' calling code. 

    ' The calculated value of the debt parameter, however, should be
    ' reflected in the value of the corresponding argument in the 
    ' calling code. Therefore, it must be declared ByRef. 
    Sub Calculate(ByVal rate As Double, ByRef debt As Double)
        debt = debt + (debt * rate / 100)
    End Sub

End Module

Ayrıca bkz.