![]() |
|
|||||||
| Konya MCPD Haftasonu 2. Grup (Suleyman Ozturk) Konya MCPD Haftasonu 2. Grup (Suleyman Ozturk) |
![]() |
|
|
Seçenekler | Stil |
|
|
#1 | ||||||||
|
Uzman Çavuş
![]()
Üyelik tarihi: Mon Sep 2008
Mesajlar: 78
Tecrübe Puanı: 77
![]() ![]() ![]() ![]() ![]()
|
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} 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
|
||||||||
|
|
|
|
Teşekkür Botu |
|
|
#2 | ||||||||
|
Uzman Çavuş
![]()
Üyelik tarihi: Mon Sep 2008
Mesajlar: 78
Tecrübe Puanı: 77
![]() ![]() ![]() ![]() ![]()
|
Unuttum hemen ekleyeyim:
eğer kullanmak isterseniz, (ki yapı itibariyle bu çok mantıksız olurdu) şöyle bir hata mesajı alırsınız: 'InheritanceLibrary.BinekArac': cannot derive from sealed type 'InheritanceLibrary.SporArac' |
||||||||
|
|
|
|
Teşekkür Botu |
Suleyman Ozturk (20-12-2008) |
|
|
#3 | ||||||||
|
Administrator
![]()
Üyelik tarihi: Sat Apr 2008
Mesajlar: 50
Tecrübe Puanı: 50
|
Gayet başarılı,teşekkürler.Bu arada Miras olayını çok severim,akılda kalıcıdır
__________________
Evrensel Aşkım Matematik Aşkım 2+2 = 2*2 = 2^2
|
||||||||
|
|
|
|
|
#4 | ||||||||
|
Uzman Çavuş
![]()
Üyelik tarihi: Mon Sep 2008
Mesajlar: 78
Tecrübe Puanı: 77
![]() ![]() ![]() ![]() ![]()
|
rica ederim
|
||||||||
|
|
|
|
|
#5 | ||||||||
|
Administrator
![]()
Üyelik tarihi: Fri May 2008
Yaş: 28
Mesajlar: 122
Tecrübe Puanı: 50
|
Hoca döktürmüssün bakıyorumda .Eline sağlık
__________________
Başarılı olmak için Doğru Karar Vermek gerekir... Doğru Karar Vermek için Tecrübe Sahibi Olmak gerekir... ve Tecrübe Sahibi Olmak için ise geçmişte bol bol Yanlış Karar Vermek gerekir.... |
||||||||
|
|
|
|
|
#6 | ||||||||
|
Uzman Çavuş
![]()
Üyelik tarihi: Mon Sep 2008
Mesajlar: 78
Tecrübe Puanı: 77
![]() ![]() ![]() ![]() ![]()
|
tşk ederim
|
||||||||
|
|
|
|
|
#7 | ||||||||
|
Onbaşı
![]()
Üyelik tarihi: Mon Oct 2008
Mesajlar: 21
Tecrübe Puanı: 5
|
Hoca gerçekten başarılı bir çalışma olmuş.
Bilgi dolu. Ellerine sağlık
__________________
Erdoğan ÖZTÜRK Konya Uzman Bilişim Akademisi |
||||||||
|
|
|
|
|
#8 | ||||||||
|
Uzman Çavuş
![]()
Üyelik tarihi: Mon Sep 2008
Mesajlar: 78
Tecrübe Puanı: 77
![]() ![]() ![]() ![]() ![]()
|
tşk ederim erdoğancım
|
||||||||
|
|
|
|
|
#9 | ||||||||
|
Onbaşı
![]()
Üyelik tarihi: Wed Jul 2008
Mesajlar: 12
Tecrübe Puanı: 9
|
çok güzel bir çalışma tebrikler
__________________
MBG |
||||||||
|
|
|
|
|
#10 | ||||||||
|
Uzman Çavuş
![]()
Üyelik tarihi: Mon Sep 2008
Mesajlar: 78
Tecrübe Puanı: 77
![]() ![]() ![]() ![]() ![]()
|
teşekkür ederim
|
||||||||
|
|
|
![]() |
| Bookmarks |
| Seçenekler | |
| Stil | |
|
|