virtual ve override
virtual ve override ile metotları yeniden tanımlamayı öğrenirsin.
virtual metotlar
Bir virtual metot, türetilmiş sınıfta yeniden yazılabilir (override). Temel sınıf varsayılan bir uygulama sunar; alt sınıf isterse kendininkini yazar: public virtual string Sound() { return "..."; }.
virtual anahtar kelimesi, metoda 'bu davranış değiştirilebilir' der. Çağrı, değişkenin derleme zamanı türüne değil, çalışma zamanındaki gerçek türüne bakar. Buna çok biçimlilik (polymorphism) denir.
override
Türetilmiş sınıf, temel sınıfın virtual metodunu override ile yeniden yazar: public override string Sound() { return "Hav"; }.
İmza (ad, parametreler, dönüş türü) birebir aynı olmalıdır. override yazmadan yeniden tanımlamak new ile gölgeler; bu polymorphism sağlamaz. Doğru davranış için virtual + override çifti kullanılır. Böylece Animal a = new Dog(); a.Sound(); çağrısı Dog.Sound'u çalıştırır.
Uygulama Shape ve Circle ile override
Bir Shape temel sınıfı tanımla ve içine public virtual double Area() metodu ekle (gövdede return 0;). Ardından class Circle : Shape tanımla, içine public double Radius { get; set; } ve public override double Area() ekle (gövdede return 3.14 * Radius * Radius;). Main içinde Circle c = new Circle { Radius = 2 }; ile örnek oluştur ve Area()'yı yazdır.
Örnek çözümü göster
Shape tanımla, override Area ekle. Main içine Circle c = new Circle { Radius = 2 }; Console.WriteLine(c.Area()); yaz.
Örnek çözüm:
using System;
class Shape
{
public virtual double Area()
{
return 0;
}
}
class Circle : Shape
{
public double Radius { get; set; }
public override double Area()
{
return 3.14 * Radius * Radius;
}
}
class Program
{
static void Main()
{
Circle c = new Circle { Radius = 2 };
Console.WriteLine(c.Area());
}
}
Kendini test et
-
Anahtar kelimeyi rolüne eşle
- virtual
- Yeniden yazılabilir
- override
- Yeniden yazar
- base
- Temel sınıf
- class
- Sınıf tanımı
-
override bildirimini tamamla
public ____ string Sound() { return "Hav"; }Cevabı göster
public override string Sound() { return "Hav"; } -
Animal a = new Dog(); a.Sound(); ne çalışır?
// Animal.Sound virtual, Dog.Sound override- Animal.Sound
- Metot çalışmaz
- Dog.Sound
- Derleme hatası
Cevabı göster
Dog.Sound — Doğru. Çalışma zamanı türü Dog olduğu için Dog.Sound çalışır.