Interface(Arayüz)
.Net’in 5 temel tipinden
(class,interface,delegate,struct,enum) biridir. Çoklu kalıtım ihtiyacını
gidermek amacı ile kullanılırlar. Interface’leri, yetenek kazandıran şablonlar
olarak tanımlayabiliriz. Bir başka deyişle; tüm üyeleri abstract olan sınıflara
benzetilebilirler.
Bir sınıf birden fazla sınıftan kalıtılamaz, ancak bir
sınıfa birden fazla interface’i implement etmek mümkündür. Genelde kullanım
amaçları, uygulandığı tiplere bazı kurallar koymak ya da bazı yetenekler
kazandırmaktır. Örneklere başlamadan önce abstract
kavramını incelemenizde fayda var diye düşünüyorum.
! Interface’ler
de, kalıtım yapar gibi ‘ : ’ işareti ile uygulanırlar. ‘ : ‘ işaretinden
sonra bir sınıf gelirse, buna “kalıtmak” ya da “extend etmek” deriz. Eğer bir
interface gelirse, buna “uygulamak” veya “implement etmek” deriz.
Temel özellikleri;- Tüm üyeleri abstract olmak zorundadır. (Üyeleri tanımlarken bizim belirtmemize gerek yoktur. Zaten default olarak abstact’tırlar.)
- Uygulandığı sınıf, o interface’in tüm üyelerini ezmek zorundadır.
- Üyeleri tanımlarken access modifier (erişim belirleyici) yazamayız. Üyeler default olarak public’tir.
Şimdi basit bir örnek üzerinde
inceleyelim.
Örnek;
Aslan, Kaplan, At ve Inek
adında 4 tane sınıf tasarlayalım. İçerisine herhangi bir üye tanımlaması
yapmayacağız.
class Aslan
{
}
class Kaplan
{
}
class At
{
}
class Inek
{
}
|
Şimdi de Etçil ve Otçul adında iki sınıf
tasarlayalım. Bu sınıflarımızı abstract olarak tanımlayacağız. Çünkü amaçları,
yukarıda yazdığımız sınıflara base class olmaktır.
abstract class
Etcil
{
public abstract void BeslenmeSekli_1();
}
abstract class Otcul
{
public abstract void BeslenmeSekli_2();
}
|
En başta
tanımladığımız 4 sınıfı, türlerine göre Etcil ve Otcul sınıflarından kalıtalım;
class Aslan:Etcil
{
public override void BeslenmeSekli_1()
{
Console.WriteLine("Ben etçilim...");
}
}
class Kaplan:Etcil
{
public override void BeslenmeSekli_1()
{
Console.WriteLine("Ben etçilim...");
}
}
class At:Otcul
{
public override void BeslenmeSekli_2()
{
Console.WriteLine("Ben otçulum...");
}
}
class Inek:Otcul
{
public override void BeslenmeSekli_2()
{
Console.WriteLine("Ben otçulum...");
}
}
|
Şimdi de Ayi adında bir sınıf
tasarlayalım. Bildiğiniz gibi ayılar hem otçul hem de etçil hayvanlardır. Yani
hem etçil hem de otçul sınıfından kalıtım yapmamız gerekecek. Ancak .Net
mimarisi çoklu kalıtıma izin vermez. İşte bu noktada interface'ler imdadımıza
yetişecektir. Etcil ve Otcul sınıflarını interface olarak tasarlayıp,
sınıflarımıza uygulayalım.
public interface
IEtcil
{
void BeslenmeSekli_1();
}
public interface IOtcul
{
void BeslenmeSekli_2();
}
|
.Net’de interface adlandırmaları büyük ‘I’
harfi ile başlar. Bu bir zorunluluk değildir ancak standartlara uymak
açısından, bu tip adlandırmalar tercih etmek daha doğru olur.
class Aslan
: IEtcil
{
public void
BeslenmeSekli_1()
{
Console.WriteLine("Ben etçilim...");
}
}
class Kaplan : IEtcil
{
public void
BeslenmeSekli_1()
{
Console.WriteLine("Ben etçilim...");
}
}
class At : IOtcul
{
public void
BeslenmeSekli_2()
{
Console.WriteLine("Ben otçulum...");
}
}
class Inek : IOtcul
{
public void
BeslenmeSekli_2()
{
Console.WriteLine("Ben otçulum...");
}
}
class Ayi : IOtcul, IEtcil
{
public void
BeslenmeSekli_1()
{
Console.WriteLine("Ben etçilim...");
}
public void
BeslenmeSekli_2()
{
Console.WriteLine("Ben otçulum...");
}
}
|
Görüldüğü gibi, interface kullanarak
sorunumuzu çözmüş olduk. Bu sayede Ayi sınıfımıza hem etçil hem de otçul olma
özelliğini kazandırmış olduk.
Yorum Gönder Blogger Facebook