Sınıfların Ortak Metotları
Overloading Methods
Aynı isimli fakat farklı parametreli methodların kullanılmasına imkan veren güçlü bir özelliktir. Overloads, Key(anahtar) ile kullanılabilir. Eğer bu key yazılmaz ise derleyici aynı isime sahip tüm methodları kontrol eder. Inherited Class kullanılmış ise muhakkak Overloads keyin kullanılmasını zorunlu kılar.
Constructors
Visual Basic 6.0’da Initialization kodu Class’ın Class_Initialize Event’ına yazılır.
Visual Basic.NET içinde bu kodların yazıldığı yere Constructors adı verilir. Sub New Constructor ile Class_Initialize Event’ının yerini aldığında oluşan farklılıklar şunlardır.
Sub New bloğu; Kod Class içindeki tüm kodlardan önce çalışır. Form’un Load Event’ına benzetebiliriz. Bir obje oluşturulduğunda, sadece bir kez çalışacaktır. Diğer bir Constructor içindeki kodun ilk satırından, aynı veya farklı bir Class içinden MyBase Key’i kullanılarak çağrılabilir.
Örnek: Yeni bir Windows uygulaması oluşturup, içine Add New Item seçeneğini kullanarak “Zeytin” isimli bir Class ekleyelim.
Zeytin isimli Class içine aşağıdaki kodları yazınız.
Public Class Class1
Public Class zeytin
Private ad As String
Private kg As Integer
Private fiyat As Integer
Public Property gad() As String
Get
Return ad
End Get
Set(ByVal Value As String)
ad = value
End Set
End Property
Public Property gkg() As Integer
Get
Return kg
End Get
Set(ByVal Value As Integer)
kg = value
End Set
End Property
Public Property gfiyat() As Integer
Get
Return fiyat
End Get
Set(ByVal Value As Integer)
fiyat = value
End Set
End Property
End Class
End Class
Form’umuzu şekildeki gibi tasarlayalım.
Button1_Click Event’ına aşağıdaki kodu yazalım.
Dim b As New zeytin()
TextBox1.Text = b.gad
TextBox2.Text = b.gkg
TextBox3.Text = b.gfiyat
TextBox4.Text = b.gkg * b.gfiyat
Programı çalıştırınız. Sonuca hiçbir değer atanmayacak, neden?
Dördüncü adımdaki kodu aşağıdaki gibi değiştirdiğinizde, TextBoxlara değer
atanacaktır.
Dim b As New Class1.zeytin()
b.gad = “ali”
b.gkg = 4
b.gfiyat = 3000
TextBox1.Text = b.gad
TextBox2.Text = b.gkg
TextBox3.Text = b.gfiyat
TextBox4.Text = b.gkg * b.gfiyat
gad ( ) Property kısmını aşağıdaki şekilde değiştirelim.
Public ReadOnly Property gad() As String
Get
Return ad
End Get
End Property
Programı çalıştırdığımızda “getir” Button’daki kod içinde hata oluşturacaktır. Bunun
sebebi: ReadOnly Keyi kullanan bir Property için, başka bir yerden değer atanamaz
olmasıdır. Ancak Class içinde sabit bir değer verilebilir.
gkg ( ) Property kısmını aşağıdaki şekilde değiştirelim.
Public WriteOnly Property gkg() As Integer
Set(ByVal Value As Integer)
Kg = value
End Set
End Property
Programı çalıştırdığımızda “getir” butonundaki kod içinde hata oluşacaktır. Bunun
sebebi ise WriteOnly keyi kullanan bir Property’nin, bir değişkene atanamaz olmasıdır.
Ancak Class bünyesinde bir işlemiçinde kullanılabilir.
Bunu test etmek için “getir” Buttonun kodunu aşağıdaki şekilde yazalım.
Dim b As New Class1.zeytin()
TextBox1.Text = b.gad
TextBox3.Text = b.gfiyat
Daha sona “zeytin.vb” içine aşağıdaki kodu ilave edelim ve programı çalıştıralım. Bu
bir constructor’dır. Yani, tüm Class içindeki kodlardan önce çalışır. Bir Class’ı New ile
çağırmanız bu yapının devreye girmesi için yeterlidir.
Public Sub New()
ad = “Ahmet can”
kg = 3
fiyat = 5000 * kg
End Sub
Zeytin Class’ı içindeki kodu ikinci adımdaki hale, “getir” butonunun içindeki kodu
dördüncü adımlardaki hale getirelim.
Zeytin Class’ı içine aşağıdaki kodu ilave edelim. Programı çalıştıralım.
Public Sub New()
ad = “Ahmet can”
kg = 3
fiyat = 5000 * kg
End Sub
Program çalıştığında Text içindeki değerlerin, Button içinde tanımlanan değerler
olduğunu gördük. Şimdi button içindeki kodu aşağıdaki şekilde getirip programı tekrar
çalıştırdığımızda, Sub New’de tanımlanan değerlerin TextBox’lara atandığını göreceğiz.
Dim b As New zeytin()
TextBox1.Text = b.gad
TextBox2.Text = b.gkg
TextBox3.Text = b.gfiyat
TextBox4.Text = b.gkg * b.gfiyat
Zeytin Class’ı içine aşağıdaki kodu ilave edelim. Programı çalıştıralım.
Public Sub New(ByVal a As String, ByVal b As String, ByVal c As
Integer)
ad = a
kg = b
fiyat = c
End Sub
Hiçbir değişiklik olmadığını izledikten sonra “getir” Button’unun içindeki kodu
aşağıdaki gibi değiştirelim ve programı çalıştıralım.
Dim b As New Zeytin(“Dinçer GÜNDOĞDU”, 23, 6000)
TextBox1.Text = b.gad
TextBox2.Text = b.gkg
TextBox3.Text = b.gfiyat
TextBox4.Text = b.gkg * b.gfiyat
Bu sefer TextBoxlara atanan değerlerin, ikinci Sub New’den geldiğini izleyelim.
Son olarak “zeytin” Class’ı aşağıdaki kodu ilave edelim ve programı çalıştıralım.
Protected Overrides Sub Finalize()
MsgBox(“güle güle”)
End Sub
Programı kapattığımız zaman yukarıdaki kod devreye girerek, “güle güle” mesajının
karşımıza çıkmasını sağlar.
Instantiating – Initializing
Daha önceki versiyonlarda Dim a as New prestige ile başlayan tanımlamalar, Visual
Basic.NET içinde bazı değişikliklere uğramıştır. Bunlar;
Tanımlama ve hafızaya yüklemenin, ayrı ayrı zamanlarada gerçekleştirilmesi.
Dim c1 as Prestige Deklare edilmesi
C1 =New Prestige ( ) Instantiate
Bu yapıda ilk önce tanımla yapılıyor, daha sonra ise program yapısının herhangi bir
anında değişken hafızaya yükleniyor.
Default Constructor kullanılarak, tek bir satırda yapılması.
Dim c1 as Prestige = New Prestige ( )
Burada tanımlama ve hafızaya yükleme işlemi aynı anda yapılıyor.
Default Constructor kullanılara, tek bir satırda yapılması.
Dim c1 as New Prestige ( )
Burada tanımlama ve hafızaya yükleme işlemi aynı anda yapılıyor.
Alternatif Constructor kullanılması;
Dim c1 as New Prestige (5)
Dim c2 as New Prestige = New Prestige ( 5)
Garabage Collection
Önceki sürümlerde referanslar, objelere Nothing Key’ini Set edince silinirdi. Bu etkili
bir uygulama idi ancak bazen ilişkili referanslar varsa bunlar yok edilmeden kalırlardı.
Visual Studio.NET içinde Nothing Key’i kullanıldığında, garabage collection aktif
duruma gelir ve ilişkili referansları da tarayarak, bulur ve yok eder. Hafıza için önemli bir
rahatlama özelliğidir. Devreye girdiğinde Finalize methodu’nu çalıştırır.
Dispose
Birçok Visual Basic.NET objesi Dispose yöntemini kullanarak, kaynakları temizler.
Client programları direkt olarak objelerin kendi özelliğinde bulunan, Dispose methodu’nu
kullanabilir. Eğer Client; Garabage Collection meydana gelmeden önce Dispose Methodu’nu
çağırmaz ve ise Finalize Method Dispose method’unu çağırır. Onun için güvenli bir şekilde
Dispose methodu kullanılabilir. Dispose Method’u kullanıldığında Garabage Collection
Finalize methodu’nu Execute yapmaya ihtiyaç duymaz. İstenirse GC Obje method’u
üzerinde Suppress finalize çağırılarak, Execute olayı disable ettirilebilir. Finalize Execute
yapılacaksa GC.Collect method’u uygulanır.
Public Interface
Bu sayede Class içindeki yapıları ayrı ayrı tutabilir ve gerektiği zaman Class içindeki
parçalardan sadece istediklerimizi değiştirebiliriz. Katman şeklinde program yazmak için,
tercih edilmesi gereken bir yapıdır.