İnterface(Arayüz) Nedir?

Interface adından da anlaşılacağı üzere diğer sınıflara yön vermek, rehberlik yapmak anlamını taşır. Interface tanımlamaları içerisinde kesinlikle kod bloğu bulunmaz. Sadece tanımlama yapılır.

Bir Class sadece bir class’tan türetebilirken, bir Class birden çok Interface ten türetilebilir.

Kod içerisinde “new” anahtar sözcüğü ile oluşturulamazlar.

Bir sınıf birden fazla interface implemente edebilir.

Implemente edicek sınıflar arasında genelde “can-do” ilişkisi vardır.

Interface içerisine sadece boş method’lar tanımlanabilir.(property de tanımlanabilir ama yazılım dünyası bunu hoş karşılamamaktadır.)

Interface adı I ile başladığına dikkat edelim. Burada I harfi bunun Interface olarak tanımlandığı hakkında bilgi verir.(zorunluluk değildir ama evrensel olarak kabul edilmiştir.)

Bir Interface’in tüm üyeleri Public kabul edilir.Abstract Class’ta olduğu gibi bunda da Private, Protected, Static gibi tanımlamalar yapılamaz.

Genelde büyük ölçekli projelerde önem kazanmaktadırlar.

Interfacelerde Abstract sınıflarda oldugu gibi method gövdeleri boş bırakılır buradaki amaç methodların implement edildikleri sınıflarda yetenek kazandırılmasıdır.

Bir console uygulaması açtım ve içerisine 3 interface bir class ekledim. Resimde de görüldüğü gibi MyClass isimli class’a istediğimiz kadar interface rehberlik edebiliyor. Şimdi interfacelerin içlerinde bazı metod tanımlamaları yapmış olalım, gördüğünüz gibi interfacelerin içerisinde sadece tanımlamalar yapılır asla tanımlamaların içerisine kod yazılmaz.

Tanımlama yaptığımız için interfacelerin rehberlik ettiği MyClass isimli sınıf hata veriyor bunun sebebi bu tanımlamaların bu sınıfa implemente edilmemesidir. Aşağıdaki resimde hatayı kutucuğun içerisinde göreceksiniz. Visual Studio bize eksik üyeleri implemente etmemizi söylüyor ve hata veriyor.

Şimdi “implement missing member” yazan kutucuğa basıp implementasyonlarımızı yaptıktan sonra MyClass isimli sınıfımıza otomatik yapılan implementasyonları göreceğiz.

Gördüğünüz gibi MyClass’a rehberlik eden interfacelerin içlerinde yaptığımız metod tanımlamaları otomatik olarak MyClass sınıfının içerisine implement edildi. Artık class’ıni içerisinde metodların içlerini istediğimiz gibi doldurabilir ve kod yazabiliriz. Basitçe metodların içlerini dolduralım.

Gördüğünüz gibi metodların içlerine kendilerinin tanımlanmış olduğu interfaceleri yazdık. Şimdi bu metodları main metod içerisinden çağırıp çalıştıralım.Şimdi çok dikkatli inceleyelim.

evet interfacelerde bu yapılamaz lakin yukarıdaki resimde gördüğünüz gibi rehberlik ettiği sınıf üzerinden new diyerek nesnemizi oluşturabilir ve hiç karışıklığa mahal vermeden tanımlamalarımıza erişebiliriz.

Yukarıda metodlarımızı çağırdık ayrıca dikkat ettiyseniz orada size özellikle bir hata gösterdim bu hatada interfacemizin yanında new kavramını kullanmışız ve bize visual studio “Bak kardeş interface ile new kullanamazsın bu olsa olsa abstract sınıf olur ben bu interfaceyi abstract sınıfa çevireyim mi?” demiş.

Kısa bir dipnot abstract sınıflar interfaceler gibidir tek farkları bir class sadece bir abstract sınıftan rehberlik alabilir ve abstract sınıfların içerisinde tanımlamanın yanı sıra o tanımlamaların içlerine kenarlarına köşelerine kodlarda yazabilirsiniz bide abstract sınıflar üzerinden new diyerek nesne üretebilirsiniz

-----------------------------------------------------ÖRNEK---------------------------------------------------------

Interface ile iki adet metod tanımlandı

public interface IIslem
    {
        void topla(int sayi1, int sayi2);
        void carp(int sayi1, int sayi2);
    }

Tanımlanan interface’i implement edelim ardından metod işlemlerini toplama ve çarpma işlemi yapabilecek şekilde gerçekleştirelim.

public class Hesap : IIslem
    {
        public void carp(int sayi1, int sayi2)
        {
            Console.WriteLine(sayi1 +"*"+sayi2 +"=" + sayi1 * sayi2);
        }
 
        public void topla(int sayi1, int sayi2)
        {
            Console.WriteLine(sayi1 + "+" + sayi2 + "=" + (sayi1 + sayi2));
        }
    }

Class’tan nesne türetelim ardından toplama ve çarpma işlemini gerçekleştirelim

Hesap hesap = new Hesap();
hesap.topla(5, 10);
hesap.carp(5, 10);

Programın Son Hali


    public interface IIslem
    {
        void topla(int sayi1, int sayi2);
        void carp(int sayi1, int sayi2);
    }
 
    public class Hesap : IIslem
    {
        public void carp(int sayi1, int sayi2)
        {
            Console.WriteLine(sayi1 +"*"+sayi2 +"=" + sayi1 * sayi2);
        }
 
        public void topla(int sayi1, int sayi2)
        {
            Console.WriteLine(sayi1 + "+" + sayi2 + "=" + (sayi1 + sayi2));
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Hesap hesap = new Hesap();
 
            hesap.topla(5, 10);
            hesap.carp(5, 10);
 
            Console.Read();
        }
    }
}

Last updated