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.