Temel Ev Sınıfı:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/*kalitimda türetilen classların namespaceleri aynı olması tek bir referans üzerinden erişmemiz için kolaylık
sağlar.*/
namespace emlakci
{
public class Ev
{
private int odasayisi;
public int Odasayisi
{
get { return odasayisi; }
set { odasayisi = value; }
}
private int katno;
public int Katno
{
get { return katno; }
set { katno = value; }
}
private int alan;
public int Alan
{
get { return alan; }
set { alan = value; }
}
private string semt;
public string Semt
{
get { return semt; }
set { semt = value; }
}
public Ev()
{
}
public Ev(int odasayisi, int katno, string semt, int alan)
{
this.odasayisi = odasayisi;
this.katno = katno;
this.semt = semt;
this.alan = alan;
}
/* virtual sanal anlamına gelir. virtual tanımlanan metotlar override ile tanımlanan metotlar tarafından
ezilebilir.*/
public virtual string EvGoruntule()
{
return string.Format(" Odasayisi: {0} Katno: {1} Alan: {2} Semt: {3}", odasayisi, katno, alan, semt);
}
}
}
Türeyen Satılık Ev Sınıfı:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/*kalitimda türetilen classların namespaceleri aynı olması tek bir referans üzerinden erişmemiz için kolaylık sağlar.*/
namespace emlakci
{
public class satilikev : Ev
{
private int fiyat;
public int Fiyat
{
get { return fiyat; }
set { fiyat = value; }
}
private int kapora;
public int Kapora
{
get { return kapora; }
set { kapora = value; }
}
public satilikev(int odasayisi, int katno, int alan, string semt, int fiyat, int kapora) : base()
{
base.Alan = alan;
base.Katno = katno;
base.Semt = semt;
base.Odasayisi = odasayisi;
this.fiyat = fiyat;
this.kapora = kapora;
}
/*override ezmek anlamına gelir. Base sınıfındaki virual tanımlanmış metodun yerine önceliği alır. Artık
virtual metot yerine aktif
* olan sınıf override sınıfı olur. base sınıfındaki virtual metodu yerine öncelikli olarak override sınıflarla
işlem yapılır. eğer
* override sınıfı bulunmaz ise virtual sınıf ile işleme devam edilir. */
/* override tanımladığımız metot türetilen sınıftaki virtual metodu yerine çağrışır. bir anlamda virtual
metodunu ezer. */
public override string EvGoruntule()
{
return base.EvGoruntule() + " Fiyat: " + fiyat + " Kapora: " + kapora;
}
}
}
Türetilen Kiralık Ev Sınıfı:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/*kalitimda türetilen classların namespaceleri aynı olması tek bir referans üzerinden erişmemiz için kolaylık sağlar.*/
namespace emlakci
{
public class kiralikev:Ev
{
public kiralikev()
{
}
public kiralikev(int odasayisi, int katno, int alan, string semt, double kira) : base(/*aşağıdaki tanımları
burada yapabilirdik.*/)
{
/*yukarıdaki boş base constructori dolu olsaydı tekrardan base ile ataması yapmamıza gerek
kalmayacaktı. */
base.Odasayisi = odasayisi;
base.Katno = katno;
base.Alan = alan;
base.Semt = semt;
this.kira = kira;
}
public double kira;
public double depozito;
/*override ezmek anlamına gelir. Base sınıfındaki virual tanımlanmış metodun yerine önceliği alır. Artık
virtual metot yerine aktif
* olan sınıf override sınıfı olur. base sınıfındaki virtual metodu yerine öncelikli olarak override sınıflarla
işlem yapılır. eğer
* override sınıfı bulunmaz ise virtual sınıf ile işleme devam edilir. */
/* override tanımladığımız metot türetilen sınıftaki virtual metodu yerine çağrışır. bir anlamda virtual
metodunu ezer. */
public override string EvGoruntule()
{
return base.EvGoruntule() + " Kira " + kira + " Depozito: " + depozito;
}
}
}
Main Sınıfı:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using emlakci;
//Not: base sınıf üzerinden kalıtım sınıflarına erişebilme:
namespace kalitimsinifi{
class Program
{
static void Main(string[] args)
{
/*kalitim tüm sınıfları base sınıf üzerinden kullanabilme imkanı verir.
fakat o sınıflara has alanı görmek için gerçek tipine cast etmemiz gereklidir. */
Ev ev1 = new kiralikev(1, 1, 1, "1", 1);
Ev ev2 = new satilikev(2, 2, 2, "2", 2, 2);
Ev ev3 = new kiralikev(3, 3, 3, "3", 3);
Ev ev4 = new satilikev(4, 4, 4, "4", 4, 4);
kiralikev ev5 = new kiralikev(5, 5, 5, "5", 5);
satilikev ev6 = new satilikev(6, 6, 6, "6", 6, 6);
Ev[] evler = new Ev[6];
evler[0] = ev1;
evler[1] = ev2;
evler[2] = ev3;
evler[3] = ev4;
evler[4] = ev5;
evler[5] = ev6;
for (int i = 0; i < evler.Length; i++)
{
Console.WriteLine(evler[i].EvGoruntule());
if (evler[i] is kiralikev)
{
/* kiralikev sinifindan bir nesne tanımlıyoruz ve bu nesneye evler[i] nesnesini (kiralikev)
operatörüyle casting edip atıyoruz.)*/
kiralikev ke = (kiralikev)evler[i];
/* NOT: (evler[i] as kiralikev).depozito deyimi casting ile aynı görevi görür. */
Console.WriteLine(" depozito: "+ ke.depozito);
}
}
Console.ReadLine();
}
}
}
No comments:
Post a Comment