Bir öncekli yazimizda vb.net programlama dili kullanilarak Sinif (Class) ve Nesne (Object) tanimlamaktan bahsetmistik. Simdi ise Sinif Üyeleri, Yordamlar (Methods), Return Deyimi, Parametreler, Deger ve Referans Yoluyla Parametre Aktarmak konularina bir göz atacagiz.
1-c Sinif Üyeleri
Kullanici tanimli yeni nesil sinif veri türü olan sinif yapisi veri ve bu veriyi kullanacak islemlerden olusur. Sinifin bu amaç için kullanilan temel üyeleri sunlardir.
- Iç Siniflar (Nested Class)
- Alanlar / Degiskenler (Variables)
- Yordamlar ( Methods)
- Yapicilar ( Constructors)
- Yikicilar ( Destructors )
- Özellikler ( Properties )
- Indeksleyiciler ( indexers)
- Numaralandirmalar ( Enumerations )
- Öznitelikler ( Attributes )
- Arabirimler ( interfaces )
- Yapilar ( Structures )
- Temsilci ve Olaylar ( Delegates & Events )
Siniflar, her zaman bu ögelerin hepsini içermek zorunda degildir. Fakat en az bir yordam içermesi beklenir. Çünkü disaridan yordamlar üzerinden nesneyle iletisim kurulur. Nesnenin üyeleri nesne isminden sonra '.' konularak kullanilir.
Degiskenler siniflarin temel üyesini teskil eder. Bazi kaynaklarda alan (field) olarakta tanimlanan degiskenler sinif içersinde degisebilir veya degismez / sabit olarak tanimlayabiliriz.
Asagidaki örnekte içinde x ve y degiskenlerin oldugu islem adinda bir sinif tanimlanmis ve bu siniftan bir nesne üretilmistir.
Module nyp
Public Class islem
Public x As Byte
Public y As Integer
End Class
Sub Main()
Dim objislem As New islem
objislem.x = 150
objislem.y = 300
End Sub
End Module
Sinif içinde sabitleri ayni sekilde tanimlayabiliriz. Sabitler, tanimlandiklari anda ilk degerlerini alan ve daha sonra degerleri degismeyen alanlardir. Burada ek olarak sunu söyleyecegiz; sabit olarak tanimlanmis alanlara nesne olusturmadan erisilir. Bu anlamda statik üyelere benzer.
Module nyp
Public Class islem
Public x As Integer = 2005
Public Const pi As Double = 3.14
Public ReadOnly numara As Integer = 2121234567
End Class
Sub Main()
Dim objislem As New islem
objislem.x = 100
Console.WriteLine("Degisken X degiskeni : {0}", objislem.x)
Console.WriteLine("Sabit Pi degiskeni : {0}", islem.pi)
Console.WriteLine("Sabit Numara degiskeni : {0}", objislem.numara)
Console.ReadLine()
End Sub
Sub islem1()
End Sub
Sub islem2(ByVal adsoyad As String)
End Sub
Sub islem3(ByVal adsoyad As String, ByVal ogrencino As Integer)
End Sub
End Module
1-d YORDAMLAR ( METHODS)
Yordam bir sinifin en önemli üyelerinden birisidir; belirli islemleri gerçeklestiren kod parçaciklaridir. Yordamlar, parametreleri verilerek isimleriyle çagirilirlar.
Sub ()
' Yapacagi islemler
End Sub
Asagidaki örnekte üç tane yordam kullanilmistir. Islem1 herhangi bir parametre almamis, islem2 bir parametre almis, islem3 ise iki parametre almistir.
Module nyp
Sub islem1()
End Sub
Sub islem2(ByVal adsoyad As String)
End Sub
Sub islem3(ByVal adsoyad As String, ByVal ogrencino As Integer)
End Sub
End Module
Fonksiyonlar farkli bir yordam türü olup yaptiklari islemlerden sonra geriye deger döndürürler. Bu yüzden fonksiyon tanimlanirken ayrica ne tür deger döndürecegide tanimlanmalidir. VB.NET ‘de fonksiyonlar Function sözcügüyle tanimlanir.
Function () As
' Yapacagi islemler
End Function
Asagidaki örnekte iki tane fonksiyon tanimlanmistir. Fn1() tek parametre alip String deger döndürürken, Fn2() iki parametre alip geriye integer bir deger döndürür.
Module nyp
Function Fn1(ByVal x As Integer) As Integer
' Yapacagi islemler
End Function
Function Fn2(ByVal x As Integer, ByVal y As Byte) As Integer
' Yapacagi islemler
End Function
End Module
1-e Return Deyimi
Return deyimi tek basina kullanildiginda yordamlar sonlandirir; yani yordamlardan çikmak için return sözcügü kullanilir. Program return satirindan sonraki kodlari çalistirmaz. Bu kodlara erisilmeyen kod ( unreachable code) denilir.
Module nyp
Sub Main()
SelamVer("Okan Düzgün")
Console.ReadLine()
End Sub
Sub SelamVer(ByVal AdSoyad As String)
Console.WriteLine("Merhaba {0}", AdSoyad)
Return
Console.WriteLine("Nasilsin, iyi misin ?")
End Sub
End Module
Görüldügü gibi program ekrana “Nasilsin iyi misin ?” satirini yazdirmadi. Çünkü return satirindan yordamin akisini kesip geriye dönmüstür.
Not : VB.NET tarafinda yordam ve fonksiyonlardan çikmak için Exit Sub ve Exit Funciton satirlari kullanilir.
Ayrica return sözcügü fonksiyonlardan deger döndürmek için de kullanilir. Fonksiyonlar çalistiktan sonra geriye return deyimi kullanilarak deger döndürür. Asagidaki örnekte sayilarin karesini döndüren bir fonksiyon yazilmistir. Program, fonksiyonu return satirina kadar isler ve karsilastigi ilk return ifadesinde disari çikar.
Module nyp
Sub Main()
Dim kare As Integer = KareAl(5)
Console.WriteLine("5'in karesi {0} :", kare)
Console.ReadLine()
End Sub
Function KareAl(ByVal KaresiAlinacakSayi As Byte) As Byte
Return KaresiAlinacakSayi * KaresiAlinacakSayi
End Function
End Module
VB.NET’te fonksiyon içinde fonksiyonun adi kullanilarak deger döndürülebilir. Bu yöntemin return’den farki, program return deyimi gördügü yerde fonksiyondan çikarken bu yöntemle fonksiyona kadar ilerler.
Module nyp
Sub Main()
Dim kare As Integer = KareAl(5)
Console.WriteLine("5'in karesi {0} :", kare)
Console.ReadLine()
End Sub
Function KareAl(ByVal KaresiAlinacakSayi As Byte) As Byte
KareAl = KaresiAlinacakSayi * KaresiAlinacakSayi
Console.WriteLine("Kare Al Fonksiyonu Çalisti !")
End Function
End Module
Yordamlar, birer kapsama alani (spoce) ifade ettikleri için, alanlari içinde tanimlanmis bir degiskene disaridan erisilemez. Yordamlarin disinda tanimlanmis degiskenlere genel, yordamlarin içinde tanimlanmis degiskenlere yerel degiskenler denir. Asagidaki örnekte Fn1() içinde x ve y degiskenleri kullanilmistir. X genel bir degisken, y ise yerel degisken Fn1() yordami ait yerel bir degisken oldugu için baska yordam x’se erisebilirken y’ye erisimezler. Çünki y degiskenin geçerlilik alan Fn1() ile sinirlidir.
Module nyp
Function Fn1(ByVal X As Byte) As Byte
'Yapacagi islemler
End Function
End Module
Yerel degiskenler bellegin yigin (stack) alani üzerinde depolanir. Ayrica çöp toplama (garbage collection) konusunda bahsedildigi gibi bir degisken kendi sahasindan çiktiktan sonra bellekten silinir. Yani yerel degiskenler içinde bulunduklari yordam islendikten sonra bellekten kaldirilir. Fn1() yordami sonlandiktan sonra y degiskeni silinmis olur.
1-f Parametreler
Yordamlarda kullanilmak üzere disardan aldiklari verilere parametre denilmisti. Veriler, yordamlara parametre araciligiyla aktarilir. Parametreler, önceki örneklerde oldugu gibi yordam isimlerinin yanina parantez içinde tanimlanir. Yordam çagrildigi zaman parametre sayisi kadar deger girilmelidir. Parametreler, birer degisken olduklari için parametrelerin türüne dikkat edilmelidir.
Bir yordamda virgülle ayrilarak birden fazla parametre tanimlanabilir. Parametrelere deger girmek zorunlu olmakla birlikte VB.NET’te seçmeli parametre birdirme imkanida vardir. Istege bagli parametreler optional sözcügüyle bildiririlir; bu parametrelere yordam tanimlanirken varsayilan (default) bir deger atanir. Kullanici bu parametreye isterse deger göndermeyebilir; bu durumda tanimlanmis varsayilan deger geçerli olur. Asagidaki örnekte Kod ve Ad isimlerinde iki tane parametresi olan Selam() yordami tanimlanmistir. Ad parametresi seçimlik bir parametredir. Main() yordaminda Selam() yordami iki sekilde kullanilmistir.
Module nyp
Sub Main()
Selam(255)
Selam(255, "Okan Düzgün")
Console.ReadLine()
End Sub
Sub Selam(ByVal Kod As Byte, Optional ByVal isim As String = "Deger girilmedi !")
Console.WriteLine("Merhaba {0} ---- Kodunuz : {1}", isim, Kod)
End Sub
End Module
Fonksiyonlar için de ayni sekilde kullanabilecegimiz bu seçmeli parametre yapisinda, dikkat edilmesi gereken nokta, seçmeli olacak parametlerin, listenin sonuna deklare edilmesi gereklidir. Yani seçmeli bir parametrenin arkasinada yine seçmeli bir paremetre olmak zorundadir.
Sub Selam(ByVal Kod As Byte, Optional ByVal isim As String = "Deger girilmedi !", Optional ByVal isim As String = "Deger girilmedi !")
End Sub
1-g Deger ve Referans yoluyla parametre aktarmak
Bir argümani, parametre olarak bir yordama gönderdigimiz de o parametrenin deger tipinden mi yoksa referans tipinden mi oldugunu gönderilen argüman açisindan önemli rol oynar. Su ana kadar isledigimiz örneklerde parametreleri deger tipi olarak tanimladik. Ön deger olarak bu sekilde olan parametrelere Byval sözcügüyle deklara edilir. Bu türde tanimlanmis parametreler üzerinde yapilan degisklikler, gönderilen argümani etkilemez. Çünkü yordama, degiskenin kendisi degil kopyasi olusturulup gönderilir.
Verecegimiz örnekte degeri 3 olan x argümani islem() yordamina parametre olarak gönderilmis. Bu yordam parametrenin degerini 10 artirarak parametrenin degerini degistirmektedir. X argümani yordama gönderildikten sonra degeri yeniden okundugunda degerinin degismedigini görmekteyiz.
Module nyp
Sub Main()
Dim x As Byte = 3
Console.WriteLine("X'in yordam öncesi degeri : {0}", x)
islem(x)
Console.WriteLine("X'in yordam sonrasi degeri : {0}", x)
Console.ReadLine()
End Sub
Sub islem(ByVal y As Byte)
y += 10
End Sub
End Module
Görüldügü gibi islem() yordaminin y üzerindeki degikligi x argümanini degistirmemistir. Çünki islem() yordamina x’ adresi degil o adresteki degeri gönderilir. Bazi durumlarda bunun tersine ihtiyacimiz olur. Yani islem() içindeki degisikligin gönderilen argümani etkilemesini isteriz. Bunun için x argümanini deger türü olarak degil, referans türü olarak yordama göndermemiz gerekmektedir. Yani yordama x’sin degerini degil x’sin adresini gönderecegiz. Bu durumda yordam içerisinde degisken üzerinde yapilacak bir degisiklik, degiskenin aslini etkileyecektir. Bu amaçla ByRef sözcügü kullanilir. Parametreler bu sözcükle bildirilir ve argümanlar bilinen sekilde yordamlara gönderilir. Yukaridaki örnegi x degiskenini referens türü olarak gönderdigimizde yordam çikisinda degerinin degistigini görürüz.
Module nyp
Sub Main()
Dim x As Byte = 3
Console.WriteLine("X'in yordam öncesi degeri : {0}", x)
islem(x)
Console.WriteLine("X'in yordam sonrasi degeri : {0}", x)
Console.ReadLine()
End Sub
Sub islem(ByRef y As Byte)
y += 10
End Sub
End Module
Argümanlar, deger türü olarak parametrelere atandigi zaman kendilerinde bir kopya olusturulur ve yordamlara öyle gönderilir. Fakat referans türü olarak gönderilirse argümanin degeri kopyalanmaz dogrudan bellekteki adresi üzerinde degisiklik yapilir.
Yordamlara gönderilen parametreler de yordamin yerel degiskenleri sayildigi için hafizanin yigin birimi üzerinde toplanir. Fakat bu parametreler, ByRef deyimiyle nitelendirilmisse yordamdaki yerel degiskenlerle ayni bölümde degil, yordamin çagrildigi alandaki degiskenlerle ayni bölümde saklanir.