Tekil Mesaj gösterimi
Alt 17-12-2008, 02:23   #1
Uzman Çavuş
Points: 2.505, Level: 20 Points: 2.505, Level: 20 Points: 2.505, Level: 20
Activity: 0% Activity: 0% Activity: 0%
 
Üyelik tarihi: Mon Sep 2008
Mesajlar: 78
Tecrübe Puanı: 77
CoRTeX is a splendid one to beholdCoRTeX is a splendid one to beholdCoRTeX is a splendid one to beholdCoRTeX is a splendid one to beholdCoRTeX is a splendid one to beholdCoRTeX is a splendid one to behold
Standart Sealed Class'lar...

SEALED CLASS'LAR VE KULLANIM ŞEKİLLERİ



Arkadaşlar; class'lara nasıl erişebileceğimize karar verebildiğimizi biliyorsunuz. Kimi class hem miras alınır hem miras verilir hemde new ile türetilebilir. Ancak bazı durumlarda, özellikle proje yapılarında bazı class'ların sadece miras alınarak kullanılmasını yani "new" ile türetilememesini, bazı class'larında sadece new ile türetilerek kullanılmasını yani miras alınamamasını isteyebiliriz. Bu tür kullanımlarda miras alınmasını istemediğimiz class'lar için SEALED CLASS kullanıyoruz.

Sealed Class'ların yapı aşamasında nasıl kullanılabileceklerine bir örnek olarak yukardaki resme bakabiliriz. Bu resimde okların nerden miras alındığını gösterdiğini unutmayalım. 1. resimde Abstract Class 1, hem Abstract Class 2 ye hemde Sealed Class 1 ve 2 ye miras verebiliyor. 2. resimde ise Sealed Class 4'den Abstract Class 3 e miras verilemediğini görüyoruz.

Kod aşamasında bu işin nasıl olduğunu görelim;

public sealed class SporArac : BinekArac
{
//class members....

}

Burada ":BinekArac" kısmı; bir SEALED CLASS olan SporArac'ın, daha önce tanımlanmış olan ve bir abstract class olan BinekArac class'ından miras aldığını gösteriyor. Kullanmak zorunda değiliz ama en azından sealed class'ların miras alabildiğini görüyoruz.

Her class'ın bir default constructor'ı olduğunu biliyoruz. Sealed class'ların ":base" yoluyla kullanılamadıklarını anlatmak için bir örnek verelim;

Birbirinden miras alan class'lardan oluşan bir yapıda yukardaki gibi durum olsun ve en altta sealed class'larımız olsun ki hepsi sadece new ile türetilebilsin.

Programın çalışma aşamasında sealed class'lardan biri kullanıldığında tanımlamaya uygun olan constructor'ları en alttan en üstteki class'a kadar gezilerek hafızada yer açılır, ama içlerindeki "class members" lar işleme sokulmazlar. En üstteki miras veren ilk class'a ulaşıldığında gezilen constructor'lara yukardan aşağıya doğru sırayla girilir ve içlerindeki işlemler yapılır.

Bir class'da sadece default constructor olmayabilir. Kullanım şekline uygun olarak overload edilmiş diğer constructor'larda kullanılabilir -ki biz bu constructor'lara ":base" ile ulaştığımızı düşünelim.

":base" kullanımı şu şekildedir;

public sealed class SporArac : BinekArac
{
public SporArac() : base(true, true)//Ust Sınıfa Gonderılecek Parametreler
{
//constructor members...
}
}

SporArac class'ının default constructor'u her ney yaparsa yapsın, ondan önce işleme giren ve bir üstünde bulunan BinekArac class'ının overload edilmiş bir CONSTRUCTOR'una (true,true) değeri gönderir. Dikkat edin; base'ler sadece bir üstteki MİRAS VEREN class'ın parametreleri uygun olan CONSTRUCTOR'una değer gönderir ve default constructor'un çalışmasını önelmiş olur.

"Base" kullanımı buraya kadar sanırım yeterli. Sizinde anlıyacağınız gibi "base" sadece miras alınan class'a gider ve sealed class'lar miras alınamadığı için "base" yoluyla ulaşılamazlar.

Sealed class'larla ilgili daha ne anlatabilirim bilmiyorum
CoRTeX isimli Üye şimdilik offline konumundadır   Alıntı ile Cevapla
Teşekkür Botu

erkanokman  (17-12-2008), Ipek Parilti (23-03-2009), Suleyman Ozturk  (22-12-2008)