Merhaba arkadaşlar, uzun zamandır doğru düzgün birşeyler yazamadım, sınav,iş derken..
Abstract metod ve sınıflar nedir, nerede nasil, neden kullanilir? Bu soruların yanıtlarını yazmaya çalışacağım inş.
Abstract sınıf/metodlara, özet yada soyut sınıf/metod da denilmektedir. Bazen hiyerarşinin en tepesindeki sınıfın bizim için pek anlamı olmayabilir. En tepede bulunan sınıfın kendisinden türetilecek sınıfların neye benzeyeceğini belirtmesini isteyebiliriz. (Ben takip edenlerin daha kolay anlaması açısından Ev-Kiralikev,Satilikev düzeninden devam edeceğim) En tepede Ev sınıfımızda bulunan evGoster metodu satilik/kiralik evlerin özelliğini gösteriyor. Biz Ev sınıfında tanımladığımız evGoster() metodunu çağırdığımızda ne iş yapacağını (hangi evi göstereceğini) bilemez. Eğer burada değil de türeyen sınıflarda belirtelim derseniz, o zaman türeyen sınıfların çok biçimliliği desteklediği söylenemez.
O zaman şöyle yapalım ; evGoster() metodunu bildirelim ancak hiçbir işlem yapmasın, yani iskeleti olsun ama gövdesi olmasın. Türeyen sınıflarda bu metod özelleştirilsin. Burada abstract araya girmektedir.
Abstract Metodlar;
abstract anahtar kelimesi ile bildirilir ve bildirilen bu metod içsel olarak zaten sanal olduğu için ayrıca virtual anahtar kelimesini kullanmaya gerek yoktur.
Önemli not : abstract metodlar sadece abstract sınıflarda bildirilebilir.
abstract public void evGoster();
Eğer biz bunu abstract değilde normal şekilde tanımlasaydık, Ev sınıfındaki evGoster() metodu çağrılabilirdi ki bu da gereksiz birşeydir, neden çağrılamadığını sınıflarda göreceğiz.
Gördüğünüz gibi gövdesi yok, aşağıdaki şekil tanımlarsak derleyici kabul etmeyecektir.
abstract public void evGoster()
{}
Abstract Sınıflar ;
Sınıf tanımlerken sadece başına abstract anahtar kelimesini belirtmeliyiz.
Abstract sınıflar tanımlanamaz, sadece kendisinden türeyen sınıflar için bir arayüz görevi görmektedir, işte bu yüzden yukarıda gereksiz diye bahsettiğim olay gerçekleşmemektedir.
abstract class Ev
{
}
Aşağıdaki kodu inceleyeyip biraz daha bilgi sahibi olabilirsiniz. Abstract sınıfın içerisinde bulunan abstract metodun nasıl kullanıldığı da gösterdim.
using System;
namespace _Abstract
{
abstract class Ev
{
public string adres;
public int alan;
public Ev(string adres, int alan)
{
this.adres = adres;
this.alan = alan;
}
abstract public void evGoster();
}
class KiralikEv : Ev
{
public int kira;
public KiralikEv(string adres, int alan, int kira)
: base(adres, alan)
{
this.kira = kira;
}
override public void evGoster()
{
Console.WriteLine("Evin Adresiı: {0}\nEvin Alanı: {1}\nEvin Kirası:", adres, alan, kira);
}
}
class Program
{
static void Main(string[] args)
{
KiralikEv kev = new KiralikEv("Yeni mah. Eski cad. No:5", 120, 200);
kev.evGoster();
Console.ReadLine();
}
}
}
Önemli Notlar: br>
abstract public int Ozellik
{
get;
set;
}
Aşağıda da override ediyoruz;
public override int Ozellik
{
get
{
//kodlarımız
}
set
{
//kodlarımız
}
}
Hatırlatma : türeyen sınıfta override yazdıktan sonra özelleştirebileceğimiz tüm elemanları derleyici bize gösteriyor, buradan hızlıca kurabilirsiniz, burada Equals(), ToString() gibi metodlar nereden geliyor derseniz ; en temel sınıf olan object sınıfından geliyor.
Birdahaki dökümanda görüşmek üzere




