Interface Kavramı

Önceki yazıda abstract kavramından bahsetmiştik, Bu yazıda da benzerlik ve farklılıkları olan interface kavramına değinmeye çalışacağım.

Interface kelime anlamı olarak “arayüz” anlamına gelmektedir. Yani asıl clasa bir şekilde referans olacaktır. Interface kendi elamanlarını referans ettiği classa miras bırakacak ve class istediği şekilde bu itemleri kullanacaktır. Yalnız bir class bir interface tarafından extend edilmiş ise, interface’in zorunlu kıldığı yetkinliklerede sahip olmuş demektir. Interface tanımlaması yapılırken zorunlu olmasada dikkat etmemiz gereken nokta; Interface tanımlarının başına “I” harfini koyuyor olmamız gerekmektedir.

Interface tanımı;


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

}
}

Interface’imizi tanımladıktan sonra sıra geldi extend edeceği classımızı tanımlamaya. Classımızı tanımlarken; interface’imizi classa extend ediyoruz. Bu esnada derleyici size kızacak ve interface’in zorunlu kıldığı elemanlarını da implement etmenizi isteyecektir. Bu durum oop tasarımcısı için bir bütünlük sağlamasında yardımcı olacaktır. Ctrl + . kombinasyonuyla kolayca implement edebiliriz. Böylece gövde tanımları yapılmayan metod,index tanımlamaları sizin kullanımınıza verilmiş oldu, istediğimiz şekilde içlerini doldurabiliriz.

Class tanımı;


class OrnekClass:IOrnekInterface
 {
 public void OrnekMetod()
 {
 throw new NotImplementedException();
 }

public int OrnekProperty
 {
 get
 {
 throw new NotImplementedException();
 }
 set
 {
 throw new NotImplementedException();
 }
 }

public event EventHandler OrnekEvent;

public string this[int index]
 {
 get
 {
 throw new NotImplementedException();
 }
 set
 {
 throw new NotImplementedException();
 }
 }
 }

Artık main metodumuzun içinde şöyle bir tanım yapabiliriz;


 static void Main(string[] args)
 {
 IOrnekInterface obj= new OrnekClass();
 obj.OrnekMetod();
 }

 

Ornek Classımız IOrnekInterface tarafından extend edildiği için böyle bir tanımlama yapabildik. Tabiki oluşturduğumuz nesnenin tipini OrnekClass’ımız üzerinden de verebilir ve aynı şekilde OrnekMetodu kullanabilirdik. Böyle bakıldığında abstract class ile interface arasında çok farklılık görünmeyebilir, hatta birtakım benzerliklerden de kısaca bahsedelim.

  • Interface’in tüm elemanları extend edilmek zorundaydı, abstract classında tüm elemanları virtual tanımlayabiliriz.  
  • Interface elemanlarının gövdeleri interface içinde tanımlanamazdı. Abstract classında virtual elemanları aynı şekildedir.

Fakat C# ‘ta bir sınıf, tek bir sınıfı inherit edebilirken, birçok interface tarafından extend edilebilmektedir.Bir classımız ihtiyacı olduğu metod yada propertylere göre birden fazla interface tarafından extend edilebilir.Interface ve Abstract kavramları arasındaki en büyük fark budur. Classımıza birde IEnumareble interface’ini de extend olarak ekliyoruz.İhtiyacımıza göre birden çok interface classlarımıza extend edebiliriz.


class OrnekClass : IOrnekInterface,IEnumerable
{
public void OrnekMetod()
{
throw new NotImplementedException();
}

public int OrnekProperty
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}

public event EventHandler OrnekEvent;

public string this[int index]
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}

public IEnumerator GetEnumerator()
{
throw new NotImplementedException();
}
}

Konuyu özetlersek;

  • Interfaceler, metod, property, event ve indeksleyiciler barındırabilirler.
  • 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 elemanlarını implemente etmek zorundadır.
  • Sınıflarda olduğu gibi interfaceler için de tüm erişim belirleyicileri kullanabiliriz. Interface elemanları için default erişim belirleyici public’tir. Kendimiz belirlemek istesek de derleyici hata verecektir.

İyi Çalışmlar.

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir