Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Visual Basic'te bir bağımsız değişkeni bir yordama değer olarak veya referans olarak geçirebilirsiniz. Bu, geçiş mekanizması olarak bilinir ve çağıran kodda bir yordamın bağımsız değişkenin altta yatan 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ıklar
Bir bağımsız değişkeni bir prosedüre geçirirken, birbirleriyle etkileşimde olan birkaç farklı ayrım olduğunu unutmayın.
Alttaki programlama öğesinin değiştirilebilir veya değiştirilemez olup olmadığı
Bir argümanın 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 mi yoksa başvuru türü mü olup olmadığı
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 bir bağımsız değişken için geçiş mekanizmasını dikkatlice seçmelisiniz.
Koruma. İki geçiş mekanizması arasında seçim yaparken en önemli ölçüt, çağrılan değişkenlerin değişime maruz kalma durumudur. Bağımsız değişken
ByRefgeçirmenin avantajı, yordamın o bağımsız değişken aracılığıyla çağıran koda bir değer döndürebilmesidir. Bağımsız değişkeniByValgeç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. Bu durumun bir istisnası,
ByValolarak geçirilen 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,ByRefolarak geçmek, bir yapı gibi büyük bir değer türü için daha verimli 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
StringveyaObjectolan değerleri bağımsız değişken olarak 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.
Eğer bir parametre ByRef ile bildirilirse, çağıran kod bağımsız değişken adını çağrısında parantez içine alarak mekanizmayı ByVal yapmaya 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 ayar, bağımsız değişkenleri değer üzerinden geçirmektir.
Bir Argümanı Değer Olarak Ne Zaman Geçirmeli
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.
Eğer temel öğe değiştirilebilirse ancak yordamın bu öğenin değerini değiştirebilmesini istemiyorsanız, parametreyi
ByValolarak bildirin. Değer olarak iletilen değiştirilebilir bir öğenin değerini yalnızca çağıran kod değiştirebilir.
Ne Zaman Bir Argümanı Referansla Geçirmeli
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. Eğer değeri olarak geçirirseniz veya çağıran kod bağımsız değişkeni parantez içine alıpByRefgeçirme mekanizmasını geçersiz kılarsa, yordam çağrısı istenmeyen sonuçlara neden olabilir.
Örnek
Açıklama
Aşağıdaki örnek, bağımsız değişkenlerin değere göre ne zaman ve referansa göre ne zaman geçirileceğini gösterir. Prosedürün hem Calculate hem de ByVal parametresi vardır. Bir faiz oranı rate ve bir para toplamı debt verildiğinde, yordamın görevi, debt'ün özgün değerine debt faiz oranını uygulamanın sonucu olan yeni bir değer hesaplamaktır. Çağıran koddaki bağımsız değişkenin değeri, debt bir ByRef parametresi olduğu için debt ile karşılık bulur ve yeni toplam bu değere 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 bakınız
- Prosedürler
- Prosedür Parametreleri ve Bağımsız Değişkenleri
- Nasıl yapılır: Argümanları Bir Yordama Aktarma
- Nasıl yapılır: Bir Yordam Parametresinin Değerini Değiştirme
- Nasıl yapılır: Bir Yordam Argümanını Değer Değişikliklerine Karşı Koruma
- Nasıl yapılır: Bağımsız Değişkeni Değer Olarak Geçmeye Zorlama
- Pozisyon ve Adına Göre Argümanları Geçirme
- Değer Türleri ve Referans Türleri