Aracılığıyla paylaş


Nasıl yapılır: Yordam Argümanının Değerini Değiştirme (Visual Basic)

Bir yordamı çağırdığınızda, sağladığınız her bağımsız değişken yordamda tanımlanan parametrelerden birine karşılık gelir. Bazı durumlarda yordam kodu, çağıran koddaki bir bağımsız değişkenin temel alınan değerini değiştirebilir. Diğer durumlarda, prosedür yalnızca bir bağımsız değişkenin yerel kopyasını değiştirebilir.

Yordamı çağırdığınızda, Visual Basic ByVal geçirilen her bağımsız değişkenin yerel bir kopyasını oluşturur. ByRef ile geçirilen her bağımsız değişken için Visual Basic, yordam koduna, çağıran koddaki bağımsız değişkenin temel aldığı programlama öğesine doğrudan başvuru verir.

Çağıran koddaki temel öğe değiştirilebilir bir öğeyse ve bağımsız değişken ByRef olarak geçirilirse, yordam kodu çağıran koddaki öğenin değerini değiştirmek için doğrudan başvuru kullanabilir.

Temel Değeri Değiştirme

Çağrı kodundaki bir prosedür bağımsız değişkeninin temel değerini değiştirmek için

  1. Yordam bildiriminde bağımsız değişkene karşılık gelen parametre için ByRef değerini belirtin.

  2. Çağıran kodda, bir argüman olarak değiştirilebilir bir programlama öğesi geçirin.

  3. Çağıran kodda, argümanı bağımsız değişken listesinde parantez içine almadan yazın.

  4. Yordam kodunda, çağıran koddaki temel öğeye bir değer atamak için parametre adını kullanın.

Bir gösterim için daha aşağı doğru örne bakın.

Yerel Kopyaları Değiştirme

Çağıran koddaki temel öğe değiştirilemeyen bir öğeyse veya bağımsız değişken geçirildiyse ByVal, yordam çağıran koddaki değerini değiştiremez. Ancak, yordam böyle bir bağımsız değişkenin yerel kopyasını değiştirebilir.

Prosedür kodundaki bir argümanın kopyasını değiştirmek için

  1. Yordam bildiriminde bağımsız değişkene karşılık gelen parametre için ByVal değerini belirtin.

    -veya-

    Çağırma kodunda bağımsız değişkeni bağımsız değişken listesinde parantez içine alın. Bu, Visual Basic'i, ilgili parametre ByRef belirtse bile bağımsız değişkeni değere göre geçirmeye zorlar.

  2. Yordam kodunda parametre adını kullanarak bağımsız değişkenin yerel kopyasına bir değer atayın. Çağıran koddaki temel değer değiştirilmez.

Ö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.

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(ByRef 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ı replace olsa bile, ByVal üyelerini değiştirebilir.

İkinci MsgBox çağrıda "replace(n) işleminden sonra: 101, 201, 301" görüntülenir. n geçirildiğindenByRef, replace çağıran koddaki değişkeni n değiştirebilir ve buna yeni bir dizi atayabilir. Bir n başvuru türü olduğundan, replace üyelerini de değiştirebilir.

Prosedürün, çağıran kodda değişkenin kendisini değiştirmesini engelleyebilirsiniz. Bakınız Nasıl Yapılır: Yordam Bağımsız Değişkenini Değer Değişikliklerine Karşı Korumak.

Kodu derleme

Bir değişkeni başvuruya göre geçirirken, bu mekanizmayı belirtmek için ByRef anahtar sözcüğünü kullanmanız gerekir.

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.

.NET Framework Güvenliği

Bir yordamın, çağıran koddaki bir bağımsız değişkenin değerini değiştirmesine izin vermenin her zaman olası bir riski vardır. Bu değerin değiştirilmesini beklediğinizi ve kullanmadan önce geçerliliğini denetlemeye hazır olduğunuzdan emin olun.

Ayrıca bakınız