23
Nis'14

OOP 10: Interface Kavramı (C# ile OOP)

Bundan önceki yazımda abstract sınıflardan bahsetmiştim. Şimdi ise abstract sınıfların yakından akrabası olan interfacelerden bahsetmeye çalışacağım. Okuldan mezun olduğumda iş görüşmelerinde karşıma sıkça şu soru çıktı: “Abstract class nedir? Interface nedir? Bu ikisi arasındaki farklar ya da benzerlikler nelerdir?” Bu sorunun ardından biraz boğazımı hafif öksürüklerle konuşmaya hazır hale getirdikten sonra “bildiğim kadarıyla” açıklamaya çalıştım hep. Gelin şimdi o zamanlar bildiğim kadarından biraz daha ileriye gidelim ve boğazımızı ufak öksürüklerle temizleyerek zaman kazanmak yerine, nedir ne değildir anlatalım anlayalım.

 

Interface kelime manası olarak arayüz demektir. Bir arayüzden beklentilerimiz, tabiri caizse asıl yüzeye bir referans sağlamasıdır. Burada asıl yüzeyi class olarak düşünebiliriz. Bir classın bu arayüzü yardımıyla biz o classın yetkinliklerinden kesin olarak haberdar olabilmekteyiz. Nasıl mı? Kural basit. Eğer bir class bir interface tarafından extend edilmiş ise o interface’in zorunlu kıldığı yetkinliklere de sahip olmuş demektir. Mesela foreach ile elemanları arasında bir döngü yapabildiğimiz tüm tipler, IEnumerable interface’inden extend edilmiş olmak zorundalardır. Şimdi daha fazla buraları kurcalamaya gerek yok. Sadece interface isimlendirmesinin “I” ile başladığına dikkat edin. Bu zorunlu olmasa da anlaşılabilirlik açısından güzel bir ayrıntıdır ve interfaceler için genel isimlendirme bu şekildedir.

 

Birkaç kural daha:

– Interfaceler, metod, property, event ve indeksleyiciler barındırabilirler.

– Sadece bir arayüz olduklarından da anlayabileceğimiz gibi, interfaceler elemanlarının gövdelerini barındırmazlar. Sadece tanımları vardır.

– Bir sınıf bir interface tarafından extend edildiğinde o interface’in tüm kurallarına uymak zorundadır. Yani tüm elemanlarını implemente etmek zorundadır.

– Sınıflarda olduğu gibi interfaceler için de tüm erişim belirleyicileri kullanabiliriz.

– Fakat interface elemanları için default erişim belirleyici public’tir. Kendimiz belirlemek istesek de derleyici hata verecektir.

 

Syntax aşağıdaki gibidir:

interface IOrnekInterface
{
    // Metod
    void OrnekMetod();
    // Property
    int OrnekPropery { get; set; }
    // Event
    event EventHandler OrnekEvent;
    // Indexer
    string this[int index]{ get; set; }
}

Yeni makaleleri E-Mail ile takip edin!