C# ile kalıtım (inheritance) konusuna girdiğimize göre kalıtım ile ilgili terimler hakkında da bilgi sahibi olmamız gerekir. Bugün paylaşacağım iki yazıda da virtual ve override sözcükleri hakkında temel bilgileri paylaşmaya çalışacağım.
Virtual metodlar (sanal metodlar), kendisinden kalıtılan alt sınıflar tarafından override edilebilen metodlardır.
Örnek: Araba sınıfı baz sınıf, SporAraba ise Araba sınıfından türetilen bir alt sınıf olsun. Araba sınıfının Calistir() metodunu SporAraba metodu altında değiştirebilmek (override etmek) istersek Calistir() metodunu Araba sınıfı altında tanımlarken sanal (virtual) olarak tanımlamamız gerekir.
Not: Override anahtar kelimesini kullanmazsak şöyle bir hata alırız: Suv.Calistir()' hides inherited member 'Araba.Calistir()'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword.
Araba.cs
class Araba
{
bool CalisiyorMu {get; set;}
public int Motor { get; set; }
public string Marka { get; set; }
public virtual void Calistir () {
CalisiyorMu = true;
System.Console.WriteLine("rrnnnn");
}
public Araba (string Marka, int Motor)
{
this.Marka = Marka;
this.Motor = Motor;
CalisiyorMu = false;
}
}
Suv.cs
class Suv : Araba
{
public int Yukseklik { get; set; }
public void DagaTirman (int Yukseklik)
{
this.Yukseklik = Yukseklik;
}
public Suv (string Marka, int Motor) :base(Marka, Motor)
{
}
public override void Calistir () {
System.Console.WriteLine("tortortor");
}
}
Program.cs
Suv cip = new Suv ("BMW", 3000);
cip.Calistir(); //tortortor
Not 2: Eğer override ettiğimiz metodun kendisini kullanmak istersek base anahtar sözcüğünü kullanabiliriz.
public override void Calistir () {
base.Calistir();
}
ya da base metodu implement ettikten sonra üzerine eklemeler yapabiliriz.
Örnek:
public override void Calistir () {
base.Calistir();
System.Console.WriteLine("tortortor");
}
Çıktı:
rrnnnn
tortortor
Önceki bazı diğer benzer yazılarım için;
bkz: C# ile Kalıtım Örneği (OOP)
bkz: Programlama Dillerinde Kalıtım Nedir?
bkz: C# Hata Ayıklama Sürecinde Watch, Locals ve Autos Kullanımı
bkz: C# ile iki boyutlu ArrayList Tanımlamak
bkz: C# ile iki tarih arasında rastgele tarih üretmek
bkz: C# ile dizideki en büyük ve en büyük sayıyı bulmak