Aracılığıyla paylaş


Nasıl yapılır: Yordam Argümanını Değer Değişimlerine 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, prosedürün çağıran koddaki bağımsız değişkenin altındaki değeri değiştirmesine olanak tanır. 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ştirmek istiyorsanız ancak diğer durumlarda aynen bırakmak istiyorsanız, onu ByRef olarak tanımlayabilir ve çağrı kodunun her çağrıda geçiş mekanizmasını belirlemesine izin verebilirsiniz. Bunu, değere göre geçirmek için ilgili bağımsız değişkeni parantez içine alarak veya referansa 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 örnek, bir dizi değişkeni alıp öğeleri üzerinde çalışan iki prosedürü göstermektedir. Yordam increase , her öğeye bir tane ekler. replace yordamı, a() parametresine yeni bir dizi atar ve ardından her öğeye bir 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ı, "Artırıldıktan sonra(n): 11, 21, 31, 41" şeklinde görüntülenir. Dizi n bir başvuru türü olduğundan, aktarım mekanizması increase olsa bile, ByVal üyelerini değiştirebilir.

İkinci MsgBox çağrıda "replace(n) işlevinden sonra: 11, 21, 31, 41" görüntülenir. n geçirildiği için ByVal, replace yeni bir dizi atayarak çağıran koddaki n değişkenini değiştiremez. replace yeni dizi örneğini k oluşturup yerel değişkenine a atadığında, çağıran kod tarafından geçirilen başvuruyu n kaybeder. a'nin üyeleri değiştirildiğinde, yalnızca k adlı yerel dizi etkilenir. Bu nedenle, replace çağıran koddaki dizi n değerlerini artırmaz.

Kodu derleme

Visual Basic'te varsayılan ayar, bağımsız değişkenleri değer üzerinden 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 bakınız