Makale Özeti

Program yazarken, devamlı olarak nesneleri kullanırız. Program esnasında çeşitli nesneler yaratırız; onları kullanır ve artık işe yaramadığı zaman da onları yok ederiz. Aslında bizim nesne dediğimiz her yapı bir sınıftır.

Makale

VB

CONSTRUCTORS VE DESTRUCTORS 1

 

Program yazarken, devamlı olarak nesneleri kullanırız. Program esnasında çeşitli nesneler yaratırız; onları kullanır ve artık işe yaramadığı zaman da onları yok ederiz. Aslında bizim nesne dediğimiz her yapı bir sınıftır. Yani her nesne bir sınıf yapısı içinde yer alır.(Örneğin Date sınıfı) Bu yazımızda ise VB.NET te sınıf oluştururken ( Constructors) ve oluşturulan sınıfı kaldırırken(Destructors) kullanılan kontrolleri ele alacağız.

 

Constructors

Visual Basic.Net içerisinde yeni nesnelerin initialization(başlangıç)  kodu procedure’ler kullanılarak kontrol edilir. Biz bu procedurelere Constructors diyoruz.

 

Daha önceden Visual Basic 6.0 da initialization kodu sınıfın Class_Initialize event’ına yazılıyordu. Visual Basic.Net içinde ise bu kodlar  Sub New Constructors bloğu içine yazılır. Biraz açalım;

VB.Net te veya VB de daha önce kod yazan herkesin kullandığı bir yöntemdir. Örneğin iki formu olan bir projeniz olsun. 1. formda bir Buttona basınca 2. form aktif olsun. 1. formda bulunan koddaki buttonun Click olayına aşağıdaki koda benzer kod yazardık. Böylece 2. form aktif olurdu;

 

Dim f2 As New Form2

f2.Show()

 

Aslında burada yaptığımız form2 nesnesinin yani sınıfının bir instance’ını (kopya) oluşturmak. Form2 nin içindeki kodları incelerseniz;

 

#Region " Windows Form Designer generated code "

 

şeklinde kod buloğu olduğunu göreceksiniz. Bu kod bloğu içerisinde aşağıdaki gibi bir Sub New bloğu da olacaktır. İşte biz bir sınıfı instance ettiğimiz zaman önce burada olan kodlar çalışır. Yeni bir sınıf oluştururken de ilk olarak çalışmasını istediğimiz kodları buraya yazarız.

 

 Public Sub New()

        Gerekli kodlar

    End Sub

 

Genel özellikleri ile Sub New bloğu aşağıdaki gibidir;

·         Sub New bloğu içindeki kod, sınıf içindeki tüm kodlardan önce çalışır.

·         Class_Initialize dan farklı olarak Sub new constructor sadece bir kez nesne oluşturulduğu zaman çalışır.

·         Eğer kod bloğumuza constructor kodu eklemezsek Compiler otomatik olarak kendisi ekler.

·         Sub new bloğu, diğer bir constructor içindeki kodun ilk satırından, aynı veya farklı sınıf içinden MyBase keyi kullanılarak çağrılır.

 

Overloading Constructors

Overloading; aynı isimli fakat farklı parametreli methodların kullanımına izin veren bir özelliktir. Constructors’larda overloading olayını gerçekleştirebiliriz. Fakat Overload anahtarını kullanamayız.

 

Public Sub New()

    ad = "Yeliz Korkmaz"

End Sub

Public Sub New(ByVal strad As String)

    ad = strad

End Sub

 

Yukarıdaki örnekte görüldüğü gibi iki adet Sub New bloğu var. Program içerisinde eğer hiçbir değer atanmazsa ilk kod; bir String değeri atanırsa ikinci kod çalışacaktır.

 

Şimdi konunun daha iyi anlaşılması için basit bir örnek yapalım.

 

Class A

    Private adi As String = "Yeliz"

    Private Soyadi As String = "Korkmaz"

    Private tekrar As Integer

    Public Sub New()

        tekrar = 1

    End Sub

 

    Public Sub New(ByVal n As Integer)

        tekrar = n

    End Sub

    Sub yaz()

        Dim i As Byte

        For i = 1 To tekrar

            MsgBox(adi & " " & Soyadi)

        Next

    End Sub

End Class

 

Class B

    Inherits A

    Private okul As String = "Cumhuriyet Üniversitesi"

 

    Public Sub New()

        Me.New(2)        Me kullanılarak Class B içindeki New Sub bloğu

                         çağrılıyor.

    End Sub

 

    Public Sub New(ByVal n As Integer)

        MyBase.New(n - 1) MyBase kullanılarak Class A içindeki New Sub  

                          Bloğu çağrılıyor

    End Sub

 

End Class

 

Yukarıdaki programda iki tane sınıf oluşturulmuştur. Programda A sınıfını iki şekilde kullanabiliriz.1.si;

 

Dim x As New A

x.yaz()

 

dersek program çıktısında bir tane “Yeliz Korkmaz” yazılı MessageBox kutusu elde ederiz.

2. kullanım şekli ise;

 

Dim x As New A(3)

x.yaz()

 

yazarsak bir oncekinden farklı olarak bir değil 3 tane MessageBox kutusu karşımıza çıkacaktır.

 

Aynı şekilde sınıf B’de iki şekilde çağrılabilir.

 

Dim x As New B(3)

x.yaz()

 

yazdığımızda sınıf A içindeki parametreli Sub New bloğunu (n-1 yani 3-1=2 ) harekete geçirecektir. Sonuçta karşımıza 2 tane MessageBox kutusu çıkacaktır.

 

Dim x As New B

x.yaz()

 

şeklinde parametresiz yazımda ise parametreli yazıma paremetresi 2 olacak şekilde bir yönlendirme olacaktır. Burada ise karşımıza 1 tane MessageBox kutusu çıkacaktır.