C# - Interface

En basit ifade ile bir interface i (arayüzü) sözleşme olarak kabul edebiliriz. Bir class a (sınıf) uygulandığında tüm fonksiyonların, propertylerin (özelliklerin) ve eventlerin (olay) kendisinde (interfacede) belirtilen üyelere uymaları gerekmektedir. Interface ler abstract (soyut) class lara çok benzerler çünkü hiçbir kod gövdesi yaratamazsınız. Başka bir ifade ile Interface ler soyut yöntemlerden başka bir şey olmayan soyut bir sınıf sayılabilir. Ayrıca C# birden fazla base class tan (temel sınıftan) türeyemese de birden fazla interface den kalıtım (Inheritance) yapabilir.

Aşağıdaki interface örneğini inceleyelim

using System;
using System.Collections.Generic;

namespace InterfaceOrnek
{
    class Program
    {
        static void Main(string[] args)
        {
            List< Hayvan> hayvanlar = new List< Hayvan>();
            hayvanlar.Add(new Hayvan("Kedi"));
            hayvanlar.Add(new Hayvan("Davsan"));
            hayvanlar.Add(new Hayvan("Bukelemun"));            

            foreach(Hayvan hayvan in hayvanlar)
                Console.WriteLine(hayvan.Aciklama());

            Console.ReadKey();
        }
    }

    interface IHayvan
    {
        string Aciklama();

        string Ad
        {
            get;
            set;
        }
    }

    class Hayvan : IHayvan
    {
        private string ad;

        public Hayvan(string ad)
        {
            this.Ad = ad;
        }
        public string Aciklama()
        {
            return "Eklenen Hayvan : " + this.Ad;
        }      
        public string Ad
        {
            get { return ad; }
            set { ad = value; }
        }
    }
}

Arayüzü "interface IHayvan" ile yaratıyoruz. İçlerinde kod bloğu olmadan property ve Fonksiyonumuzu belirtmekteyiz. Property içindeki "get; set;" kod bloğu olarak sayılmamaktadır. Interface adları yaratılırken genellikle adının önüne "I" eklenir. Bunu yapma zorunluluğumuz yoktur. Bu bir kod standartıdır. Çünkü hem bunun bir Interface olduğu anlaşılır hem de class lar ile oluşabilecek isim benzerliğinin önüne geçer.

Bir başka konuda erişim beliryicilerin Interface lerde olmamasıdır. Interface lerde "public, private.." gibi keyword ler (anahtar kelimeler) tanımlayamazsınız. Interface ler doğası gereği herkese açık olmak zorundadır.

"Hayvan" class ımızı tanımlarken ona "IHayvan" interface imiz ile inherit (kalıtım) sağlıyoruz. Bunun anlamı, class ı tanımlarken "IHayvan" interface indeki üyeleri kullanmak zorunda olduğumuzdur. Şunu unutmayın class ta bu interface dışında farklı üyeler de olabilir ama tüm "IHayvan" üyeleri en azından olmak zorundadır. Yulardaki kodu test etmeniz açısından Hayvan sınıfı içindeki "private string ad;" bölümünü silin.. Kodun hata verdiğini göreceksiniz.


C#

İlginizi Çekebilir

C# - Kalıtım (Inheritance)

C# - Özellikler (Property)

C# - Static İfadesi

C# - Döngüler

C# - Namespace