
Abstraction (Soyutlama) detayları saklama ve sadece gösterilmesi istenen bilgileri kullanıcıya göstermek amacıyla kullanılır. Abstraction(Soyutlama) hem Abstract class(soyutlama sınıfları) ile hem de interfaces (arayüzler) ile yapılır.
Abstrat keyword sınıflar ve metotlar için kullanılır.
- Abstract Class : Abstract class’lardan instance object (örnek nesne) oluşturulamaz. Abstract class’a ulaşmak için başka bir sınıftan kalıtım alınması gerekir.
- Abstract Method : Sadece abstract class içerisinde kullanılır. Metot içerisine herhangi birşey yazılmaz. Bir abstract class hem abstract metotlara hem de normal metotlara sahip olabilir. Bu kısım önemli. Şimdi bir örnekle bunu gösterelim.

Yukarıda vehicle adında bir abstract class oluşturduk. Bu sınıfın içerisinde bir GetFuel() abstract metodu ve stop() adında değer döndürmeyen normal metot oluşturduk. Şimdi farklı bir sınıf daha oluşturalım.

Abstract metotlar sadece soyut sınıflar(abstract classes) içerisinde kullanılabilirler demiştik. Bu metotlar mirasçı sınıflarda override edilmek zorundadırlar. Yapacakları işlemler override edildikleri sınıfta kodlanmalıdır.

Neden soyut sınıf(abstract class) ve metotlarını kullanırız?
Güvenliği sağlamak ve nesnenin önemli detaylarını göstermek amacıyla kullanılır.
Soyutlama ayrıca interface(arayüz) ile de uygulanabilir. Şimdi onun üzerinde duralım.
INTERFACE
Bir sınıf sadece başka bir sınıftan kalıtım alabilir. Birden fazla sınıftan kalıtım alamaz, C# bunu desteklememektedir. Bu noktada yardımımıza interface yetişiyor. Bir sınıf bir veya birden fazla interface’den kalıtım alabilir. Buna multiple interface denir.
Interface bir soyut sınıftır ve sadece metot ve özellikleri(properties) içerir. Field(alan) içermez.
Önemli Not : Default olarak interface üyeleri abstract ve public erişim belirleyicisine sahiptir.
Şimdi bir örnekle devam edelim.

Yukarıda IComputer adında bir interface tanımladık. Bu interface içerisinde 2 adet metot tanımladık. Yukarıda da bahsettiğim gibi bu 2 metotta aslında abstract ve public erişim belirleyicisine sahiptir.

Şimdi bir adet daha interface tanımlayalım. Ve bu interface içerisinde bir adet metot tanımladık. Şimdi bir class oluşturalım.

Dell adında bir sınıf oluşturduk ve IComputer ve IDellInterface interface’lerden kalıtım aldık. Burada biz interface’ler içerisindeki metotları sınıf içerisine yazmazsak hata verecektir. Metotları sınıf içerisine ekledikten sonra istediğimiz işlemleri yapabiliriz.
Interface kısmını özetlersek;
- Abstract class’ta da olduğu gibi interface nesne türetmek için kullanılamaz.
- Interface sadece metot ve özellikleri(property) bulundurabilir. Field(alan) bulunduramaz.
- Interface üyeleri default olarak abstract ve public erişim belirleyicisine sahiptir. Bu yazılmasa dahi öyledir.
- Interface yapıcı metot(constructor) içeremez. Interface ile bir nesne türetilemeyeceğini söylemiştim, bu çıkarımı bununla beraber de yapabiliriz.