Abstract Nedir?

Abstract Class, ortak özellikli Class’lara Base(taban) Class olma görevini üstlenir. Örneğin siz projenizde birden fazla Class oluşturup kullanmak istiyorsunuz. Ve oluşturacağınız Class’lar pek çok yönden ortak özellikleri içerisinde barındırıyor. İşte bu durumda Abstract Class kullanmanız kodunuzun daha sağlıklı olmasını sağlayacaktır.

Abstract Class’lar, diğer sınıflara base Class olmak için yazılır. Bu nedenle Abstract Class’dan nesne türetilemez.

İkinci iş olarak Abstract Method‘ların ne olduğunu açıklığa kavuşturalım. Abstract method, sadece Abstract Class’ların içerisinde tanımlanır ve Abstract Class’ı kalıtan sınıf tarafından override edilmek zorundadır. Oluşturduğumuz Abstract Class içerisine, Abstract Method yazılırken gövdesi yazılmaz ve daha sonra Abstract Class’ımızı kalıtacağımız sınıfta Abstract Method’u override ederiz.

Abstract Method, sadece Abstract Class’ların içerisinde tanımlanabilen, tanımlanırken !gövde bulundurmayan!, daha sonra içerisinde bulunduğu Abstract Class kalıtılırken override edilen Method‘lardır.

Abstract Method’lar, Private olarak tanımlanamaz.

Abstract sınıf virtualdir.

Static tanımlanamazlar. ( Tanımlanmaya çalışılırsa compiler “an abstract class cannot be sealed or static” hatası verir)

Constructors (yapıcı metodlar) ve destructors (yıkıcı metodlar) bulundurabilirler.

Temel olarak Abstract Class ve Abstract Method’ları tanımlamaya çalıştım. Sıra geldi Abstract’ları bir örnekle pekiştirmeye.

Öncelikle senaryoyu anlatayım. Bizim Ucak adında bir tane Abstract(taban) sınıfımız olacak. Ve daha sonra bu Abstract Class’dan BuyukUcak ve KucukUcak sınıflarını kalıtacağız. Ve Ucak Abstract Class’ımızın içerisine basit bir “UcakFiyatı” isimli method yazıp, bu method’u kalıttığımız Class’larda override ederek, UcakFiyatı isimli methodumuza gövdeyi implement edeceğiz.

“Ucak” Abstract Class’ımızı yazalım;

public abstract class Ucak
{
public int YolcuKapasitesi { get; set; }
public string UcakSirketi { get; set; }
//Ucak’ların ortak Özellikleri’leri

public abstract void UcakFiyati();
//override edilecek abstract methodumuz
}

Gördüğünüz gibi Abstract Class’ımızda, sonradan oluşturulabilecek Ucak Class’larının ortak özellikleri ve bir tane override ederek gövdesini oluşturacağımız bir Abstract Method var.

 //Büyük Uçak Sınıfı
 public class BuyukUcak : Ucak //Ucak Abstract Class’ından kalıtılan Class
 {
 public override void UcakFiyati() //Ucak Abstract Class’ından, Class kalıtırken override ettiğimiz, gövdesini doldurduğumuz method.
 { 
 Console.WriteLine(“Büyük Uçağın Fiyatı 5m”);
 Console.ReadLine();
 }
 }

 //Küçük Uçak Sınıfı
 public class KucukUcak : Ucak
 {
 public override void UcakFiyati()
 {
 Console.WriteLine(“Küçük Uçağın Fiyatı 3m”);
 Console.ReadLine();
 }
} 

Ucak Abstract Class’ından kalıttığımız BuyukUcak ve KucukUcak sınıflarında, UcakFiyati Abstract Method’unu override ederek gövdesini dolduruyoruz. İçerisine ise Büyük Uçağın ve Küçük Uçağın temsili fiyatlarını Console’a yazdırıyoruz.

static void Main(string[] args)
{
KucukUcak k = new KucukUcak();
k.UcakFiyati();
//fieldları kullanmadığımız bir örnek oldu
}

Son olarak ise Ucak Abstract sınıfından kalıtılan KucukUcak sınıfından oluşturduğumuz “k” nesnesini kullanarak UcakFiyati methodunu çalıştırıyoruz. Konsoldan gelen çıktı aşağıdaki gibi olacaktır.

-----------------------------------------------------ÖRNEK---------------------------------------------------------

Aşağıdaki örnekte mobilya isimli bir abstract sınıf ve bu sınıfta ozellikyaz() isimli bir metot bulunmakta. Bu sınıftan kanepe ve masa isimli mirasçı sınıf oluşturarak override edelim. Class yapımızı aşağıdaki şekilde oluşturuyoruz.

public abstract class mobilya
    {
        public string renk;
        abstract public void ozellikyaz();
    }
 
   public class kanepe : mobilya
    {
        public string kumas;
        public override void ozellikyaz()
        {
            Console.WriteLine("Kanepenin Özellikleri");
            Console.WriteLine("Renk: {0}",renk);
            Console.WriteLine("Kumaş: {0}", kumas);
        }
    }
 
   public class masa : mobilya
    {
        public string malzeme;
        public override void ozellikyaz()
        {
            Console.WriteLine("Masanın Özellikleri");
            Console.WriteLine("Renk: {0}", renk);
            Console.WriteLine("Malzeme: {0}", malzeme);
        }
    }

Program.cs:

class Program
    {
        static void Main(string[] args)
        {
            kanepe knp1 = new kanepe();
            masa calisma_masasi = new masa();
            knp1.renk = "Siyah";
            knp1.kumas = "Deri";
            calisma_masasi.renk = "Sarı";
            calisma_masasi.malzeme = "Ahşap";
            knp1.ozellikyaz();
            calisma_masasi.ozellikyaz();
            Console.ReadKey();
        }
    }
 

ÇIKTI

Last updated