Aracılığıyla paylaş


Nasıl yapılır: Bir Yordam Bağımsız Değişkenini Değer Değişikliklerine Karşı Koruma (Visual Basic)

Bir yordam bir parametreyi ByRef olarak bildirirse, Visual Basic yordam koduna çağıran koddaki bağımsız değişkenin temel aldığı programlama öğesine doğrudan başvuru verir. Bu, yordamın çağıran koddaki bağımsız değişkenin temel alınan değerini değiştirmesine izin verir. Bazı durumlarda, çağıran kod bu tür bir değişikliğe karşı korumak isteyebilir.

Yordamda ilgili ByVal parametresini bildirerek bağımsız değişkeni değişiklikten her zaman koruyabilirsiniz. Belirli bir bağımsız değişkeni bazı durumlarda değiştirebilmek ancak bazı durumlarda değiştirebilmek istemiyorsanız, bunu ByRef bildirebilir ve her çağrıda geçiş mekanizmasını çağıran kodun belirlemesine izin verilmektedir. Bunu, değere göre geçirmek için karşılık gelen bağımsız değişkeni parantez içine alarak veya başvuruya göre geçirmek için parantez içine almayarak yapar. Daha fazla bilgi için bkz . Nasıl yapılır: Bağımsız Değişkeni Değere Göre Geçirilmeye Zorlama.

Örnek

Aşağıdaki örnekte bir dizi değişkeni alan ve öğeleri üzerinde çalışan iki yordam gösterilmektedir. Yordam increase , her öğeye bir tane ekler. yordam parametresine replacea() yeni bir dizi atar ve ardından her öğeye bir dizi ekler. Ancak, yeniden atama, çağrı kodundaki temel dizi değişkenini etkilemez.

Public Sub increase(ByVal a() As Long)
    For j As Integer = 0 To UBound(a)
        a(j) = a(j) + 1
    Next j
End Sub
Public Sub replace(ByVal a() As Long)
    Dim k() As Long = {100, 200, 300}
    a = k
    For j As Integer = 0 To UBound(a)
        a(j) = a(j) + 1
    Next j
End Sub
Dim n() As Long = {10, 20, 30, 40}
Call increase(n)
MsgBox("After increase(n): " & CStr(n(0)) & ", " & 
    CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Call replace(n)
MsgBox("After replace(n): " & CStr(n(0)) & ", " & 
    CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))

İlk MsgBox çağrıda "Artış sonrası(n): 11, 21, 31, 41" görüntülenir. Dizi n bir başvuru türü olduğundan, increase geçirme mekanizması olsa ByValbile üyelerini değiştirebilir.

İkinci MsgBox çağrıda "Değiştirildikten sonra(n): 11, 21, 31, 41" görüntülenir. n geçirildiğindenByVal, replace koda yeni bir dizi atayarak çağıran koddaki değişkeni n değiştiremez. Yeni dizi örneğini k oluşturup yerel değişkenine aatadığındareplace, çağıran kod tarafından geçirilen başvuruyu n kaybeder. üyelerini adeğiştirdiğinde yalnızca yerel dizi k etkilenir. Bu nedenle, replace çağıran koddaki dizi n değerlerini artırmaz.

Kodu derleme

Visual Basic'te varsayılan değer, bağımsız değişkenleri değere göre geçirmektir. Ancak, bildirilen her parametreye ByVal veya ByRef anahtar sözcüğünü eklemek iyi bir programlama uygulamasıdır. Bu, kodunuzun okunmasını kolaylaştırır.

Ayrıca bkz.