using System;
namespace VirtualFunctionMembers
{
class Program
{
/*Virtual bir fonksiyon altclası tarafından değiştirilerek özelleştirilebilir.
* Methodlar,özellikler, ve olaylar virtual şeklinde tanımlanabilir.
*/
public class Urun
{
public string UrunAdi;
public virtual decimal ToplamTutar { get { return 0; } }
}
//virtual metoda uygulayacağımız değişiklik için altclass içerisinde override kullanırız.
public class Gida : Urun
{
public DateTime SonKullanmaTarihi;
public decimal Tutar { get; set; }
public decimal VergiOrani { get; set; }
public override decimal ToplamTutar
{
get
{
return Tutar + (VergiOrani / 100) * Tutar;
}
}
}
public class Arac : Urun
{
public string Renk;
public decimal Fiyat;
public override decimal ToplamTutar
{
get
{
return Fiyat;
}
}
}
public class Hava : Urun
{
public string Yer;
}
/*Varsayılan olarak Urun içerisinde Liability nin değeri 0 dır.
* Gida yı kullanırken urunun bazı özelliklerini ondan miras aldık. Burada Vergi Oranı kullanılacak şekilde özelleştirebildik.
* Otomobil için Fşyatını direk yansıtan bir method tanımladık.
* Hava da ise varsayılan değer olan tutarı yani 0 lirayı atacaktır.
*/
static void Main(string[] args)
{
Gida ekmek = new Gida { UrunAdi = "Ekmek",SonKullanmaTarihi=DateTime.Now,VergiOrani=8,Tutar=100};
Urun a = ekmek;
Console.WriteLine(ekmek.ToplamTutar);//108
Console.WriteLine(a.ToplamTutar);//108
//Burada gida için oluşturulan özel fonksiyonu kullanarak %8 vergi oranı olan bir fonksiyon oluşturduk.
Console.WriteLine("//////////////////////////////////////////////");
Arac oto = new Arac { UrunAdi = "Otomobil",Renk="Kırmızı",Fiyat=100 };
Urun b = oto;
Console.WriteLine(oto.ToplamTutar);//100
Console.WriteLine(b.ToplamTutar);//100
//Burada Aracın normal değerini yansıtan başka bir metod tanımladık
Console.WriteLine("//////////////////////////////////////////////");
Hava car = new Hava { UrunAdi = "Opel",Yer="İstanbul" };
Urun c = car;
Console.WriteLine(car.ToplamTutar);//0
Console.WriteLine(c.ToplamTutar);//0
//Burada Urunun varsayılan değerini alıyoruz. Yani otomatik olarak sıfır gelecektir.
Console.ReadKey();
/*Dikkat edersek yeni fonksiyon oluştururken override ettiğimiz ToplamTutar metodu
* daha önceki virtual metodu değiştirerek oluşturduğumuz yeni classa özel bir metod haline getirdi.
* */
}
}
}