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şkeniByVal
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
ByVal
bir 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 verimliByRef
olabilir.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
veyaObject
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
ByVal
bildirin. 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
ByRef
bildirin. 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ılarsaByRef
, 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 rate
para toplamı verildiğinde yordamın görevi, debt
faiz oranını özgün değerine uygulamanın sonucu olan için yeni bir değer debt
debt
hesaplamaktır. Bir debt
ByRef
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.
- Yordamlar
- Yordam Parametreleri ve Bağımsız Değişkenleri
- Nasıl yapılır: Bir Yordama Bağımsız Değişkenler Geçirme
- Nasıl yapılır: Bir Yordam Bağımsız Değişkeninin Değerini Değiştirme
- Nasıl yapılır: Bir Yordam Bağımsız Değişkenini Değer Değişikliklerine Karşı Koruma
- Nasıl yapılır: Bağımsız Değişkeni Değere Göre Geçirilecek Şekilde Zorlama
- Bağımsız Değişkenleri Konuma ve Ada Göre Geçirme
- Değer Türleri ve Başvuru Türleri