Polimorfizm temelleri
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
-
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.
-
Geçersiz kılınabilir anahtar kelime
public ____ void Draw() { }Cevabı göster
public virtual void Draw() { } -
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