ABSTRACT (Soyut sınıf) NEDİR NASIL KULLANILIR ÖRNEKLER

ABSTRACT CLASS
-> new kelimesi ile oluşturulmaz.
-> Birleştirici rol oynar.
-> Özet sınıftan türetilmiş alt sınıflara ait nesneler, özet sınıf tipindeki referanslara
bağlanabilir (upcasting)
-> Bu şekilde polymorhism ve late binding kullanılabilir.
-> Bir sınıfın özet olabilmesi için en az bir tane soyut metot içermesi gerekir.
-> Özet metotların gövdesi bulunmaz (yani içi boş ve hiçb ir iş yapmayan metot
görünümündedirler.)
-> Özet sınıftan türetilmiş sınıfların bu sınıfa ait metotları override etmesi gereklidir.


abstract void calis(); // gövdesi olmayan özel metot ve tamamı ile bir boş şablon görünümünde ve
görevindedir.


-> abstract sınıflar miras alınmadan kullanılamaz.
-> Özet sınıftan türeyen sınıf nesneleri üzerinden özel sınıfa ait yapıcılar kullanılarak özet
sınıfın üye değişkenleri değiştirilir.
-> Özet sınıflar türünden nesneler tanımlanamaz.
-> Özet sınıflar özet metotlar içerebilir ö zet sınıfın sahip olduğu erişim belirteci onu inherit
eden sınıf ile aynı olmak zorundadır.
-> Özet sınıflarda sealed kelimesi kullanılamaz.
-> Özet sınıflar private, virtual, ya da static olamazlar

  1       using System;  
      2        
      3       namespace abstract_uygulama_1  
      4       {  
      5        abstract class insan  
      6        {  
      7          public abstract void konus();  
      8        }  
      9        class ingiliz  : insan  
      10      {  
      11        public override void konus() { Console.WriteLine("Hello"); }  
      12      }  
      13      class Program  
      14      {  
      15        static void Main()  
      16        {  
      17          ingiliz ing = new ingiliz();  
      18          ing.konus();  
      19          Console.ReadLine();  
      20        }  
      21      }  
      22      }  

ÖRNEK ► Abstract Uygulama 2

  

       1     using System;  
       2     //abstrct sınıfın oluşturulması  
       3     namespace abstract_uygulama  
       4     {  
       5      abstract class absClass  
       6      {  
       7        //abstract olmayan bir metot  
       8        public int toplama(int sayi1, int sayi2)   
       9        {  
      10          return sayi1 + sayi2;  
      11        }  
      12        //derived class'ta overide edilecek bir abstract metot  
      13        public abstract int carpma(int sayi1, int sayi2);  
      14      }  
      15      //absClass'ın child class'ı  
      16      class absDerived  : absClass  
      17      {  
      18        //override kullanılarak abstract metodun implementasyonu  
      19        public override int carpma(int sayi1, int sayi2)  
      20        {  
      21          return sayi1 * sayi2;  
      22        }  
      23        static void Main()  
      24        {  
      25          absDerived hesapla = new absDerived();  
      26          int topla = hesapla.toplama(10, 20);  
      27          int carp = hesapla.carpma(10, 20);  
      28          Console.WriteLine("Toplam: {0}, Carpim: {1}", topla, carp);  
      29          Console.ReadLine();  
      30        }  
      31      }  
      32     }  

ÖRNEK ► Abstract Uygulama 3

       1     using System;  
       2      
       3     namespace abstract_uygulama  
       4     {  
       5      abstract class Calisan  
       6      {  
       7        public string gorev = "Calisan";  
       8        public abstract void calis(); //abstract metot   
       9        public void zamyap()  
      10        {  
      11          Console.WriteLine("Calisan zam istiyor, o zaman kovun!");  
      12        }  
      13      }  
      14      class Mudur  : Calisan  
      15      {  
      16        public Mudur() { gorev = "Mudur"; }  
      17        public override void calis() { Console.WriteLine("Mudur gec geliyor!"); }  
      18      }  
      19      class Programci  : Calisan  
      20      {  
      21        public Programci() { gorev = "Yazilimci"; }  
      22        public override void calis() { Console.WriteLine("Programci sabaha kadar calisiyor...");  
         }  
      23        public void zamyap()  
      24        {  
      25          Console.WriteLine("Programci zam istiyor");  
      26        }  
      27      }  
      28      class Pazarlamaci  : Calisan  
      29      {  
      30        public Pazarlamaci() { gorev = "Pazarlamaci"; }  
      31        public override void calis() { Console.WriteLine("Pazarlamaci hep disarda geziyor..."); }  
      32      }  
      33      public class Program  
      34      {  
      35        static void mesaiBasla(Calisan[] c)  
      36        {  
      37          for (int i = 0; i < c.Length; i++)  
      38          {  
      39            c[i].calis();  
      40          }  
      41        }  
      42        static void Main()  
      43        {  
      44          Calisan[] c = new Calisan[4];  
      45          c[0] = Calisan(); // soyut sınıflar new ile direkt oluşturulamaz.  
      46          c[1] = new Mudur();  
      47          c[2] = new Programci();  
      48          c[3] = new Pazarlamaci();  
      49          mesaiBasla(c);  
      50          Console.ReadLine();  
      51        }  
      52      }  
      53      }  

ABSTRACT VE INTERFACE ARASINDAKİ FARKLAR

Bir arayüz metotları uygulayamaz. Bir ab stract sınıfı, yöntemleri uygulayabilir.
-> Bir interfa s ancak başka bir arayüzden miras alabilir. Bir ab stra ct cla ss bir
cla ss bitmiş veya daha fazla arayüz s.
-> Bir arayüz alan içeremez. Ab stra ct cla ss alanları içerebilir.
-> Bir arabirim özellik tanımını içerebilir ve ab stract sınıfı bir özelliği uygulayabilir.
-> Bir arabirim yapıcı ve yapılandırıcıları içeremez. Soyut bir cümle şunları içerebilir:
yapıcı ve yıkıcı s.
-> Bir arayüz, yapılardan miras alınabilir. Bir ab stract cla ss,
yapıya göre s.
-> Bir arayüz birden çok kalıtımı destekleyebilir, bir ab stract sınıfı birden fazla kalıtım olamaz.

Bir yanıt yazın