C# programlama dilinde Abstract Class (Abstract sınıf) ile Interface (arayüz) kullanımları benzerlik gösterse de aralarında çok temel farklılıklar vardır ve hangi durumda abstract class, hangi durumda ise interface kullanacağınıza karar verebilmeniz için bu temel farkları bilmeniz gereklidir.
bkz: C# Abstract Anahtar Sözcüğü Nedir? Abstract Kullanımı ve Örnekleri?
bkz: Interface Nedir?
Kısaca hatırlayacak olursak Abstract class, kendisinden doğrudan nesne üretilemeyen sınıflar hazırlayabilmek için kullanılan class modifier idi. Amacı ise kendisinden kalıtım yoluyla türetilen alt sınıflara özelliklerini ve metodlarını aktarmaktı; ayrıca alt sınıflarının implement etmesi gereken metodları belirtmekti. Örneğin Arac sınıfından doğrudan bir nesne üretmek istemeyiz, bunun yerine Araba ve Motorsiklet alt sınıflarından nesneler üretmek isteriz ve araçlarda ortak bulunan özellik ile metodları da üst sınıf içerisinde barındırmak isteriz. Bu gibi durumlarda Abstract class kullanımı uygundur.
Interface'i ise impelent edilmesi gereken metod isimlerinin belirtildiği ve metodların içinin olmadığı anlaşmalar olarak özetleyebiliriz. Örneğin Araç sınıfından türetilen Araba ve Motorsiklet sınıflarının kendi Sür metodlarının olması gerektiğini, ama bu metodların kendi içinde hazırlanması gerektiğini şart koşan bir anlaşma olarak Interface kullanabiliriz.
Interface ile Abstract Class Arasındaki Benzerlikler
- Her ikisinden de nesne üretilemez
- Her ikisi de çok biçimliliği (polymorphism) destekler
Interface ile Abstract Class Arasındaki Farklar
- Bir sınıf tek bir abstract class'tan türetilmiş olabilir (yani tek bir üst sınıfı olabilir), ama bir sınıfa birden fazla interface implement edilebilir
- Interface'lerin kurucusu (cosnstructor) olmaz, ama Abstract class'ların kurucusu olabilir
- Interface'te metodların sadece bildirimi vardır, abstract class'ta ise hem bildirimi hem de gövdesi vardır
- Sınıflar Interface'lerin tüm metodlarını implement etmelidir, abstract sınıfların ise sadece abstract metodlarını implement etmesi gerekir
- Interface'lerin alanları da yoktur
Önceki bazı diğer ilgili yazım için;
bkz: C# Sealed Anahtar Sözcüğü Nedir? Sealed Kullanımı ve Örnekleri?
bkz: C# Polymorphism (Çok Biçimlilik) Nedir?
bkz: C# Base Anahtar Sözcüğü Nedir? Kullanımı ve Örnekleri
bkz: C# IEnumerable Nedir?
bkz: C# Programlama Dilinde Koleksiyon Nedir?