CodeBlanks Logo Icon CodeBlanks

virtual ve override

C# kursu · Orta seviye · Ders 15/116

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

  1. Anahtar kelimeyi rolüne eşle

    virtual
    Yeniden yazılabilir
    override
    Yeniden yazar
    base
    Temel sınıf
    class
    Sınıf tanımı
  2. override bildirimini tamamla

    public ____ string Sound() { return "Hav"; }
    Cevabı göster
    public override string Sound() { return "Hav"; }
  3. 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.

Orta seviye bölümündeki tüm dersler