C# Interface Nedir

Interface içinde sadece kendisinden türeyen sınıfların içini doldurmak zorunda olduğu içi boş metod tanımlarının yapıldığı bir yapıdır. Kısacası kendisini kullanacak sınıflar için bir yerine getirmeleri gereken metodları belirten bir kontrat gibidir. 
Interface normal bir class değildir, sadece neyin yapılacağını göstermekte, ancak nasıl yapılacağını göstermemektedir.


  • Interface’ler de Abstract sınıflar gibi new ile oluşturulamazlar
  • Bir sınıf birden fazla interface implemente edebilir.
  • Interface içerisine sadece boş method’lar tanımlanabilir.



Abstract ile interface arasındaki fark: Abstract ve interface programlamada kullanılan iki farklı ifade. Interface Türkçe arabirim anlamına gelir. Nesne yönelimli programlamada ise metot ve property listesidir. Abstract ise hem sınıflarda (class) hem de fonksiyonlarda kullanılan bir modifier’dır.
Bir class sadece bir tane abstract class inherit edebilir.
Bir class birden fazla interface inherit edebilir.
Bir abstract class kodun tamamını ya da yazılması gerekenin sadece detayını sunabilir.
Bir interface sadece imza sunar, herhangi bir kod sunamaz.
Bir abstract class sub’lar, fonksiyonlar ve property’ler için access modifier’lar içerebilir.
Bir interface sub’lar, fonksiyonlar ve property’ler için access modifier’lar içeremez. Herşey public kabul edilir.
İlgili sınıftaki metodu bulabilmek için daha çok zamana ihtiyaç duyar.

Abstract ile Interface Arasındaki Fark

Abstract ile interface arasındaki fark; Ferid Mövsümov blogunda çok kapsamlı ve detaylı bir şekilde yazılmış. Bu farkları aşağıda alıntıladım.

  1. Interfaceler çoklu kalıtımı sağlamaya yardımcı abstract classlar ise çoklu kalıtımı desteklemez.
  2. Interfacelerde metodların içerisini dolduramayız ama abstract classlarda doldurabiliriz Böylece bütün alt sınıfların belli bir özelliğe sahip olmasını sağlayabiliriz.
  3. Interface ile yapabildiğimiz herşeyi hatta daha fazlasını abstract classlar ile de yapabiliriz.
  4. Eğer türeteceğimiz classlarda belli başlı varsayılan özellikleri tekrar tekrar kopyala-yapıştır yapmak istemiyorsak o zaman abstract class kullanmamız gerekir. Çünkü abstract classlarla bir metodu tüm alt classlarda varsayılan metod şeklinde tanımlayabiliriz ve alt classlarda bunları tekrar yazmamıza gerek kalmaz kalıtımla aktarılmış olur.
  5. Kalıtım sağlamak istiyorsak abstract classlar kullanmamız gerekir.
  6. Abstract classları kullanmak hız açısından avantaj sağlar.
  7. Interface de yeni bir metod yazdığımız zaman bu interfaceden implement ettiğimiz tüm classlarda bu metodun içini tek tek doldurmak gerekiyor ancak abstract classlarda durum farklıdır burada bir metod tanımlayıp içini doldurduğumuzda abstract sınıfımızdan türetilmiş bütün sınıflar bu özelliği kazanmış olur.

Hiç yorum yok:

Yorum Gönder