Değer tipleri değişkenleri içerdikleri verinin bir kopyasını oluşturarak yalnızca kendisine gönderilen veriyi saklarlar. Diğer değişkenleri etkilemezler. ByVal ifadesi ile belirtilirler.
Referans tipi değişkenler ise direkt olarak veriyi saklamak yerine verinin hafızada saklanacağı adresi saklarlar. Dolayısı ile aynı hafıza bölgesine adresleme yapan diğer referans değişkenlerini etkileyebilirler. ByRef ifadesi ile belirtilirler.
Örnek bir uygulama yapalım;
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim mesaj As String
mesaj = "Ana Program tarafından oluşturulan mesaj"
MsgBox(mesaj)
mesajyaz(mesaj)
MsgBox(mesaj)
End Sub
Private Function mesajyaz(ByVal mesaj As String)
mesaj = "Alt Program tarafından oluşturulan mesaj"
End Function
End Class
Örneğimiz çalıştırdığımızda her iki defasında da “Ana Program tarafından oluşturulan mesaj” mesajını görüntülemektedir. Çünkü fonksiyonumuzu değer tipinde tanımladığımız için mesaj değişkeninin içeriğinde yapılan değişiklik ana programdaki mesaj değişkeninin içeriğini etkilememektedir.
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim mesaj As String
mesaj = "Ana Program tarafından oluşturulan mesaj"
MsgBox(mesaj)
mesajyaz(mesaj)
MsgBox(mesaj)
End Sub
Private Function mesajyaz(ByRef mesaj As String)
mesaj = "Alt Program tarafından oluşturulan mesaj"
End Function
End Class
Alt programda tanımladığımız mesaj değişkeninin Byref ile referans tipte tanımlayıp kodumuzu çalıştırdığımızda ise önce “Ana Program tarafından oluşturulan mesaj” mesajını daha sonra ise “Alt Program tarafından oluşturulan mesaj” mesajını görüntülemektedir. Çünkü fonksiyonumuzu referans tipinde tanımladığımız için mesaj değişkeninin içeriğinde yapılan değişiklik ana programdaki mesaj değişkeninin içeriğini de etkilemekte ve yeni içerik görüntülenmektedir.
Proje dosyalarının linki:
http://www.volkanaktas.com/PrgDosya/vbnet/Byval_Byref.rar