CodeBlanks Logo Icon CodeBlanks

Polimorfizm temelleri

C# kursu · Orta seviye · Ders 59/116

Aynı çağrının farklı türlerde farklı davranmasını öğrenirsin.

Polimorfizm ne demek?

Polimorfizm, aynı çağrının farklı türlerde farklı davranmasıdır. Bir Shape taban sınıfın Draw metodu virtual ise, türetilmiş Circle sınıfı bunu override ile değiştirebilir.

Önemli olan: Shape s = new Circle(); yazdığında s.Draw() çağrısı çalışma zamanında nesnenin gerçek türüne bakar ve Circle.Draw'ı çalıştırır. İşte bu gecikmeli seçim, polimorfizmin kalbidir. Aynı kod, farklı nesnelerle farklı sonuçlar üretir.

Taban referansı türetilmiş nesneyi gösterir

Polimorfizmin pratik tarafı şudur: bir taban sınıf referansı, türetilmiş bir nesneyi tutabilir. List<Shape> içine Circle, Square, Triangle ekleyebilirsin.

Sonra tek bir foreach döngüsüyle hepsinde Draw çağırırsın. Her nesne kendi çizim metodunu çalıştırır. Bu, kodu tür bağımsız yapar: yeni bir şekil eklendiğinde döngüyü değiştirmen gerekmez.

Uygulama Shape ve Circle ile polimorfizm

Shape sınıfı tanımla; içinde virtual void Draw() metodu olsun ve Console.WriteLine("Şekil çiziliyor") yazsın. Circle : Shape sınıfı tanımla; Draw'ı override edip Console.WriteLine("Daire çiziliyor") yazsın. Main içinde ikisini List<Shape> içine koy ve foreach ile Draw çağır.

Örnek çözümü göster
Shape { public override void Draw() { Console.WriteLine("Daire çiziliyor"); } } yaz. Main içine List<Shape> ve foreach ekleyip Draw çağır.
Örnek çözüm:
using System;
using System.Collections.Generic;

class Shape
{
    public virtual void Draw()
    {
        Console.WriteLine("Şekil çiziliyor");
    }
}

class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Daire çiziliyor");
    }
}

class Program
{
    static void Main()
    {
        var shapes = new List<Shape> { new Circle(), new Shape() };
        foreach (var s in shapes)
        {
            s.Draw();
        }
    }
}

Kendini test et

  1. Bu kodun çıktısı ne olur?

    Shape s = new Circle();
    s.Draw();
    // Circle.Draw override eder
    • Circle.Draw çalışır
    • Shape.Draw çalışır
    • Derleme hatası oluşur
    • Çalışma zamanı hatası fırlatır
    Cevabı göster

    Circle.Draw çalışır — Doğru. Çalışma zamanında nesnenin gerçek türü seçilir: Circle.Draw.

  2. Geçersiz kılınabilir anahtar kelime

    public ____ void Draw() { }
    Cevabı göster
    public virtual void Draw() { }
  3. Anahtar kelimeyi anlamına eşle

    virtual
    Geçersiz kılınabilir
    override
    Taban metodu değiştirir
    sealed
    Daha fazla türetmeyi engeller
    base
    Taban sınıfı çağırır

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