Arayüzler bir sınıfın sahip olması gereken özellikleri tanımlarlar. Arayüz içerisinde kod yazılmaz, sadece özellik ve metot imzaları verilir. Bir arayüzden miras alan sınıf arayüzün tüm metotlarını ezmek zorundadır. Arayüzlerden tıpkı soyut sınıflar gibi nesne referansları oluşturulamaz. Bir sınıf birden fazla arayüzden miras alabilir.

C# - Interface (Arayüz) Kavramı

Arayüzler interface anahtar kelimesi ile tanımlanır ve public olmak zorundadır. Bir gelenek (ya da standart) olarak arayüzlerin başına I konulur. Ancak zorunlu değildir. Miras alan sınıf içinde private özellikler ya da metotlar tanımlanabilir.

Şimdi bir örnek yapalım. Bir sitede üyeler ve yöneticiler (admin) olsun. Biz de onların özelliklerini belirleyelim.

interface IUye
{
    string Ad { get; set; }

    void Ekle();
    void Listele();
}

interface IAdmin
{
    void Duzenle(int id);
    void Sil(int id);
}

Üyelere ve adminlere ait özellikleri belirledik. Şimdi iki sınıf için de miras alma işlemini yapalım.

class Uye : IUye
{
    public string Ad { get; set; }
    public string Parola { get; set; }

    public void Ekle()
    {
        Console.WriteLine("Yeni kayıt eklendi.");
    }

    public void Listele()
    {
        Console.WriteLine("Kayıtlar listelendi.");
    }
}

Üye sınıfında IUye'den miras aldık ve metotları implement edip içlerini (temsili olarak) doldurduk. Şuanda bir üyenin sadece kayıt ekleme ve listeleme hakları var. Şimdi yöneticiler için bir sınıf oluşturalım.

class Admin : Uye, IAdmin
{
    public void Duzenle(int id)
    {
        Console.WriteLine("Kayıt düzenlendi: " + id);
    }

    public void Sil(int id)
    {
        Console.WriteLine("Kayıt silindi: " + id);
    }
}

Özellikleri ve ekle - sil metotlarını tekrar IUye'den miras almak yerine Uye'den alıp içlerini tekrar doldurma yükünden kurtulduk. Ardından IAdmin'den gelen düzenle - sil metotlarının gövdelerini oluşturduk. Artık istediğimiz gibi new Admin(); ya da new Uye(); diyerek IUye ve IAdmin'deki tüm hakları (ekle, listele, düzenle, sil) kullanabiliriz. Tabi bir üye sadece düzenle ve listele işlemleri yapabilir.

Bir sınıfın birden fazla arayüzden miras alabileceğini söylemiştik. Şimdi adminlere biraz daha hak tanıyalım.

public interface ISuperAdmin
{
    void VerileriYedekle();
    void BakimModu(bool siteBakimdaMi);
}

Süper adminler sitenin veritabanına erişim sağlayabilir ve site yayınını geçici olarak durdurabilirler. Şimdi metot içeriklerini yazalım. Yeni bir SuperAdmin sınıfı oluşturmak yerine IAdmin ve ISuperAdmin'den miras aldık.

class Admin : Uye, IAdmin, ISuperAdmin
{
    /* IAdmin özellikleri */
    public void Duzenle(int id)
    {
        Console.WriteLine("Kayıt düzenlendi: " + id);
    }

    public void Sil(int id)
    {
        Console.WriteLine("Kayıt silindi: " + id);
    }

    /* ISuperAdmin özellikleri */
    public void VerileriYedekle()
    {
        Console.WriteLine("Veriler diske yedeklendi.");
    }

    public void BakimModu(bool siteBakimdaMi)
    {
        if (siteBakimdaMi)
        {
            Console.WriteLine("Site erişime kapatıldı.");
            Console.WriteLine("Yedeklemeye başlayabilirsiniz.");
        }
        else
        {
            Console.WriteLine("Site erişime açıldı.");
        }
    }
}

Yukarıda olduğu gibi yine miras aldığımız metotların içini doldurduk (implement). Arayüzlerin olayı bu, sadece bir sınıfın hangi özellikleri barındırması gerektiğine karar verirler ve yazılımcıyı buna zorlarlar. Başka da bir numarası yok.

Kolay gelsin.