4

Bu makalemde yine Object Oriented bileşenlerinden olan Interface (Arayüz) kullanımını anlatacağım.

Öncelikle Interface, Türkçe anlamı “Arayüz” olan, ve diğer class lara Rehberlik görevi üstlenen bir yapımızdır. Burada Rehberlik kavramına dikkat çekerim. Yani gerçekten yaptığı iş sadece diğer classlara yön göstermektir. Bu yüzden Interface tanımları içerisinde kesinlikle kod bloğumuz bulunmaz. Interface yapılar sadece tanımlamalardan ibarettir, içerisinde hiçbir yapıcı metod ekleyemeyiz.

Interface i diğer classlardan ayıran birçok özellik vardır. Bunlara birazdan değineceğim.

Ama en önemlisi:

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

Yani, bir Classa birden çok Interface ile rehberlik edebiliriz.

Şimdi bir örnek ile Interface kavramına giriş yapalım.

public interface IBasliklar

{

string Isim();

string AnaBaslik();

string AltBaslik();

string Yazdir();

}

public interface IUzunluk

{

string En();

string Boy();

string Kalinlik();

string Yazdir();

}

Class oluştururken nasıl “Class” parametresi kullanıyorsak, Interface oluştururken de “Interface” anahtar sözcüğünü kullanırız.

Oluşturduğumuz Interface isimlerinin, I ile başladığına dikkat çekerim. Bu bize kalıtım aldığımız calss ta, kalıtım alınan şeyin bir Interface olduğunu gösterir.

Interface oluştururken dikkat edeceğimiz maddeler aşağıda ki gibidir:

  • Interface ler yukarda bahsettiğim gibi Rehber görevi görürler. Yani içerisine herhangi bir kod parçası ekleyemeyiz. Sadece tnaımlama yaparız.
  • Bir Interface in tüm üyeleri Public kabul edilir. Private, Protected, Static gibi tanımlanamazlar.
  • Üyeleri public olarak ta tanımlayamayız, çünkü zaten hepsi public olarak tanımlanmış kabul edilir. Aksi halde hata alırız.
  • Bir arayüzü, başka bir arayüzden türetebiliriz, fakat bir Class tan yada Struct dan türetemeyiz.
  • Interface leri miras alan sınıflar, içerisinde tanımlanan tüm metodları Implemente etmek zorundadır.
  • Şimdi, Samsung adında bir Class ımız olsun ve yukarda tanımlanan Interface lerden IBasliklar arayüzünü miras alsın.


Resim-1

Abstract Classlarda gördüğümüz gibi karşımıza tüm metodları otomatik implement edecek seçenek çıkmaktadır. Fakat burda iki seçeneğimiz var, farklarını hemen açıklayalım.

İlk seçeneğimiz zaten normal olanıdır, yani Interface içerisinde ne kadar metod var ise implement edecektir.

2. Seçeneğimizde, “Explictly” keywordu vardır, Explictly: açıkça, bariz bir şekilde anlamına gelir ve bu şekilde implement edeceğimiz metodların hangi Interface ten türetildiği belirtilmektedir. Bu Explictly nin kullanım amacı da budur, yani karmaşıklığı önler.

Implement işlemini Explictly olarak kullanma durumumuz, birden fazla Interface ten miras aldığımız zamanlar, aynı metod ismi 2 Interface lerde de olabilir. Bu karışıklığı önlemek için metod isimlerinin başına Interface isimleri gelmektedir.

Örneğin yukarda tanımladığımız 2 Interface de “Yazdır()” metodu bulunmaktadır. 1 tane implement edilmiş public Yazdır() metodu varsa sorun olmaz, uygulama hata vermez. Ama ya 2 Yazdır() metodu da farklı işlemler yapıyorsa?

O zaman aşağıdaki gibi tanımlarız.

string IBasliklar.Yazdir()

{

return “IBaslik Yazdır Metodu”;

}

string IUzunluk.Yazdir()

{

return “IUzunluk Yazdır Metodu”;

}

Ve kod tarafında da aşağıdaki gibi çağırırız:

Samsung S3 = new Samsung();

IBasliklar Baslik = (IBasliklar)S3;

IUzunluk Uzunluk = (IUzunluk)S3;

Baslik.Yazdir();

Uzunluk.Yazdir();

Evet, şimdi genel örneğimize geçelim,

Samsung Classını hem IBasliklar, hemde IUzunluk Interface lerinden miras aldırtalım, metodları implement edelim. (“Yazdır()” metodlarımız explictly olarak implemente edilecek)

public class Samsung:IBasliklar,IUzunluk

{

#region IBasliklar Members

public string Isim()

{

return “Model :Galaxy- S3”;

}

public string AnaBaslik()

{

return “Teknoloji”;

}

public string AltBaslik()

{

return “Telefon”;

}

#endregion

#region IUzunluk Members

public string En()

{

return “70,6 mm”;

}

public string Boy()

{

return “136,6 mm”;

}

public string Kalinlik()

{

return “8,6 mm”;

}

public string IBasliklar.Yazdir()

{

return “IBaslik Yazdır Metodu”;

}

public string IUzunluk.Yazdir()

{

return “IUzunluk Yazdır Metodu”;

}

#endregion

}

Implement ettiğimiz metodlar, Interface ismi ile #region – #endregion alanları arasında tanımlanır ki bu metodlarımızın hangi interface altında olduğunu anlamak daha kolay olsun.

Bir Class, birden fazla Interface den kalıtım aldırılacak ise, Interface ler aralarına “,” konulur. (aşağıdaki gibi)

class Samsung:IBasliklar,IUzunluk

Ve Samsung adlı Class ımızı kullanarak verileri getirelim.

static void Main(string[] args)

{

Samsung S3 = new Samsung();

IBasliklar Baslik = (IBasliklar)S3;

IUzunluk Uzunluk = (IUzunluk)S3;

Console.WriteLine(S3.Isim());

Console.WriteLine(“Ana Başlık :” + S3.AnaBaslik());

Console.WriteLine(“Alt Başlık :” + S3.AltBaslik());

Console.WriteLine(Baslik.Yazdir());

Console.WriteLine();

Console.WriteLine(“En :” + S3.En());

Console.WriteLine(“Boy :” + S3.Boy());

Console.WriteLine(“Kalınlık :” + S3.Kalinlik());

Console.WriteLine(Uzunluk.Yazdir());

}

Aldığımız sonuç aşağıdaki gibidir.


Resim-2

Bu makalemde, Interface yapısını, nasıl kullanıldığını ve kullanırken nelere dikkat etmemiz gerektiğini anlatmaya çalıştım.

Yukarda yaptığımız örnekleri içeren uygulamayı buradan indirebilirsiniz.

Bu konuyla ilgili sorularınızı  alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

Bu İçeriğe Tepkin Ne Oldu?
  • 29
    harika_
    Harika!!
  • 5
    be_enmedim
    Beğenmedim
  • 2
    _ok_iyi
    Çok iyi
  • 3
    sevdim_
    Sevdim!
  • 9
    bilemedim_
    Bilemedim!
  • 5
    olmad_
    Olmadı!
  • 3
    k_zd_m_
    Kızdım!

1986 Aksaray Doğumluyum, Yıldız Teknik Üniversitesi Matematik bölümünden 2010 yılında mezun oldum ve yaklaşık 4 senedir IT sektöründe Yazılım ve Sistem uzmanı olarak çalışmaktayım. Bu süre içerisinde birçok Windows ve Web uygulamaları geliştirmiş olup, SQL Server konusunda oldukça tecrübeliyim. MCP, MCTC, MCPD, MCITP, MCSA ve CCNA sahip olduğum sertifikalardır.

Yazarın Profili
İlginizi Çekebilir

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yorumlar (4)

  1. 02/01/2014

    Çok faydalı ve giriş seviyesi için güzel bir anlatım. Teşekkürler.

  2. teşekkürler çok faydalı oldu

  3. neden kullanma ihtiyacı duyarız sorusunu pek cevaplamamış. Bunu ancak duyulmuş bir ihtiyaç olarak anlatabilirsiniz.Bilginizi yazma noktasındaki cömertliğinizi saygı duyarak,sadece sıradan bir makale olduğunu ifade etmek istedim.Saygılarımla..

  4. Kendim vs de denediğimde Yazdır kısmında ( Public string Iuzunluk.Yazdır ) bu kısımda hata aldım sorun Public i silince düzeldi. Nedenini biliyor musunuz? Güzel ve açıklayıcı anlatımdı teşekkürler.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir