Daha önce Abstract (özet/soyut) metodların türeyen sınıfta özelleştirilmesi gerektiğini söylemiştik. Şimdi de ona benzeyen başka bir veri türü olan Interface i işleyeceğiz. Interface ile bütün metod ve özellikleri abstract olan bir sınıftan fazla farkı yoktur aslında.
Arayüzler bildirilirken başına büyük I harfi konulur, bu bir gelenektir, bir zorunluluğu yoktur.
Arayüzlerde metod, özellik, indexleyici, delegate ve olay bildirimi yapılabilir. Bildirdiğimiz bu veri türlerinin gövdesi yoktur.
Bildirimine geçmeden önce önemli 3 tane özellikten bahsetmek istiyorum;
- Arayüzde bütün elemanlar içsel olarak public olduğu için ayrıca bir erişim belirleyicisi kullanmak yanlıştır.
- Arayüzde statik eleman bildirimi yapılamaz.
- Arayüzde değişken bildirimi yapılamaz.
Arayüz bildirimi interface anahtar sözcüğü kullanılarak bildirilir. Aşağıdaki kod bloğunda 2 metod ve bir özellik tanımladık.
interface IArayuz
{
string alanYaz();
void evGoster();
int alanBilgisi
{
get;
set;
}
}
Bir arayüzü uygulayan bir sınıfın, arayüzde bildirilen bütün elemanları uygulama zorunluluğu vardır. Abstract sınıflar içinde aynı şeyi söylemiştik. Örneğin yukarıda bildirdiğimiz alanBilgisi özelliğini uygulamak istediğimizde sadece get yada set bloğunu uygulayamayız, arayüzde hem get hem de set bloğu olduğundan her iki bloğuda uygulamak zorundayız.
Yukarıda bildirdiğimiz arayüzü şimdi bir sınıfta uygulayalım. Sizin de dikkatinizi çekecektir, abstract sınıflarda override edip özelleştirirken, arayüzde herhangi bir anahtar kullanmaya gerek duyulmamaktadır.
using System;
namespace _Interface
{
interface IArayuz
{
string alanYaz(string alan);
void evGoster(string evinAdi,string adres);
int alanBilgisi
{
get;
set;
}
}
class Evimiz : IArayuz
{
public string alanYaz(string alanBilgisi)
{
return ("Alan : " + alanBilgisi);
}
public void evGoster(string evAd, string evinAdresi)
{
Console.WriteLine("Adı : " + evAd + "\nAdresi : " + evinAdresi);
}
public int alanBilgisi
{
get { return alanBilgisi; }
set { alanBilgisi = value; }
}
}
class Program
{
static void Main(string[] args)
{
Evimiz evim = new Evimiz();
Console.WriteLine(evim.alanYaz("213"));
evim.evGoster("Nurullah", "ndemir.com");
}
}
}
class Evimiz : IArayuz
Bu tanımlamayı yaptıktan sonra derleyici IArayuz un hemen başına bir işaret atacaktır, oraya tıklayıp Implement interface ‘IArayuz’ e bastığınızda derleyici bütün elemanları otomatik olarak size hazırlayacaktır, kullanışlı birşey
Bir sınıf birden çok arayüz uygulayabilir;
class Sinifimiz : IArayuz, IEnumerable
{
//kodlarımız
}
Değilmesi gereken diğer bir konu ise; arayüzleri birbirinden türetebileceğimiz. Aşağıdaki kodu inceleyin.
interface IArayuz
{
string alanYaz(string alan);
}
interface IArayuz2 : IArayuz
{
void bilgiGoster();
}
class Evimiz : IArayuz2
{
// burada sadece bilgiGoster() metodunu uygulamak yanlıştır, çünkü IArayuz2 kalıtım yolu ile alanYaz() metodunu da almıştır.
// sonuç olarak alanYaz() ve bilgiGoster() metodlarının ikisinde uygulamak zorundayız.
}
Giriş için bu kadarını yeterli görüyorum
Arayüzlerin devamı olarak 2. yazıyı da yazarım inş.
Hayırlı günler.




