Ben bazı arabirim özelliklerini yine tekrar etmek istiyorum.
1) Arabirimler bir classa standart getirirler.
2) Arabirimlerde sadece üyeler tanımlanır, açıklayıcı kod yazılmaz.
3) Arabirimler üyeleri(method, özellik, indexleyici, ve olay) doğası gereği publictirler.
4) Bir sınıf birde fazla arabirimden kalıtım alabilir..
5) açık ve kapalı şekilde implement edilebilir.
Senaryomuza göre canli sınıfı yapalım, bu sınıfı güncelhayatdan bir örnek vereceğimiz için, tıpkı melekler gibi soyut(absract) sınıf olsun ve new deyimi ile nesnesini oluşturma imkanı olmasın.. Yas özelliği yazalım ve yasamayaDevamEt() yöntemi yapalım.. ve canli sınıfı yaşamaya devam etsin..:)
abstract class Canli
{
public int yas { get; set; }
void yasamayaDevamEt()
{
Console.WriteLine("Dünya çok güzel");
}
}
Daha sonra IUcar ve IGazer isimli iki tane arabirim yazalım. Burada dikkat edeceğimiz konu Uc() yöntemi her iki arabirimde tanımlanmış. Sizler daha önceki yazımda belirtiğim gibi açık ve kapalı olarak interface implement edebilirisiniz.
interface IUcar
{
void Uc();
int kanatSayisi { get; set; }
}
interface IGezer
{
void Uc();
void Gez();
int Hiz { get; set; }
}
c# yorumlayıcısına(compiler) yazacağımız ve kullanacağımız Uc yonteminin hangi Arabirimin yöntemi olduğunu anlatmamız gerekir. Bizler boyle bir durumda kaplaı şekilde belirtmek yerine ;
public void Uc()
{
Console.WriteLine("kanatla ucuyorum");
}
Bu arabirimin(explicitly) yontemini açık bir şekilde belirtmemiz gerekir.
void IUcar.Uc()
{
Console.WriteLine("kanatla ucuyorum");
}
diğer arabirim için
void IGezerr.Uc()
{
Console.WriteLine("Jet motorla ucuyorum");
}
artık Insan sınıfımızın kalıtım aldığı arabirimin üyelerinin zorunlu olarak implement edelim ve gerekli kodları yazalım.
class Insan : Canli, IUcar,IGezer
{
void IUcar.Uc()
{
Console.WriteLine("kanatla ucuyorum");
}
void IGezer.Uc()
{
Console.WriteLine("Jet motorla ucuyorum");
}
int _kanatsayisi;
public int kanatSayisi
{
get
{
return _kanatsayisi;
}
set
{
_kanatsayisi=value;
}
}
public void Gez()
{
Console.WriteLine("Dünya da ne yerler varmış ve gezmekle bitmiyor");
}
int _hiz;
public int Hiz
{
get
{
return _hiz;
}
set
{
_hiz=value;
}
}
}
Burada _hiz ve _kanatsayisi diye iki özel bir alan kullandım.
Şimdi gelelim bunları kullanacak kod yazmaya. burada Insan sınıfının bir örneği(nesnesi) olan ercepin kanatsayisi özelliği hem okunur hemde yazılabilir bir özelliktir. ercep. yazarak ben bu üyeleri erişebilirim. Fakat Uc() yöntemi için derleyiciye ben hangi Uc() yöntemini kullanacağımı anlatmam gerekir. Burada cast işlemi(kesme) imdadımıza yetişiyor. Ben sizin öğrenmeniz için Uc() yontemini iki farklı yazım metoduyla yazdım.
class Program
{
static void Main(string[] args)
{
Insan ercep = new Insan();
// ercep.Uc(); //bu şekilde kullanamayız.
ercep.kanatSayisi = 2;//property set yapılıyor.
IUcar iucar = (IUcar)ercep; // cast-kesme işlemi
Console.WriteLine(iucar.kanatSayisi + " kanat ile ucarım");
iucar.Uc();
((IGezer)ercep).Uc();//jet motor
ercep.Hiz = 30;
ercep.yas = 5;
}
}
Bir yazımızda görüşmek üzere, sevgili öğrecilerim..
Sizin seçtiğiniz maskot resminizi koyuyorumm..
arabirimler1.rar (23,05 kb)