CodeBlanks Logo Icon CodeBlanks

Özet - Polimorfizm

C# kursu · Orta seviye · Ders 64/116

virtual, override ve pattern matching'i birleştirerek bir işçi hiyerarşisi yazarsın.

Özet: Polimorfizm araç seti

Bu grupta polimorfizmin dört önemli aracını gördün: virtual/override ile runtime dispatch, new ile metot gizleme, is/as ile tür testi ve güvenli dönüşüm, switch ifadesi ile tip kalıpları.

Şimdi bunları gerçek bir senaryoda birleştireceksin: bir çalışan hiyerarşisi. Önce virtual dispatch ile maaş hesaplayacaksın, sonra switch ifadesi ile pozisyona göre prim dağıtacaksın. Aynı kod farklı alt türlerle farklı davranacak; bu polimorfizmin gücü.

Uygulama Sanal dispatch ile maaş hesapla

Employee sınıfında public virtual int Pay() metodu return 1000; yapsın. Manager : Employee sınıfında override int Pay() metodu return 2000; yapsın. Main içinde List<Employee> oluştur; içine new Manager() ve new Employee() koy. foreach ile her birinin Pay()'ini Console.WriteLine ile yaz.

Örnek çözümü göster
Employee { public override int Pay() { return 2000; } } yaz. Main'de List<Employee> { new Manager(), new Employee() } oluştur ve foreach (var e in emps) Console.WriteLine(e.Pay()); yaz.
Örnek çözüm:
using System;
using System.Collections.Generic;

class Employee
{
    public virtual int Pay()
    {
        return 1000;
    }
}

class Manager : Employee
{
    public override int Pay()
    {
        return 2000;
    }
}

class Program
{
    static void Main()
    {
        var emps = new List<Employee> { new Manager(), new Employee() };
        foreach (var e in emps)
        {
            Console.WriteLine(e.Pay());
        }
    }
}

Uygulama switch ifadesi ile prim ver

Yukarıdaki Employee ve Manager sınıflarını kullan. Program içine static int Bonus(Employee e) metodu yaz; switch ifadesi kullansın: Manager için 500, Employee için 100 döndürsün. Main içinde Bonus'u bir Manager ve bir Employee ile çağırıp Console.WriteLine ile yaz.

Örnek çözümü göster
static int Bonus(Employee e) { return e switch { Manager m => 500, _ => 100 }; } yaz. Main'de Console.WriteLine(Bonus(new Manager())); Console.WriteLine(Bonus(new Employee())); ekle.
Örnek çözüm:
using System;

class Employee { }
class Manager : Employee { }

class Program
{
    static int Bonus(Employee e)
    {
        return e switch
        {
            Manager m => 500,
            _ => 100
        };
    }

    static void Main()
    {
        Console.WriteLine(Bonus(new Manager()));
        Console.WriteLine(Bonus(new Employee()));
    }
}

Polimorfizm hazır

Tebrikler! Artık polimorfizmin dört aracını biliyorsun: virtual/override, new, is/as ve switch ifadesi. Birbirinden farklı alt türleri tek bir taban referansıyla yönetebilir, runtime'da doğru davranışı seçebilirsin.

Sonraki gruplarda bu araçları koleksiyonlarla, generic sınıflarla ve LINQ ile birlikte kullanacaksın. Polimorfizm, nesne yönelimli C#'ın temel direklerinden biridir; modern kütüphanelerin çoğu bu mekanizmalar üstüne kuruludur.

Kendini test et

  1. Hangi ifade çalışma zamanı dispatch yapar?

    Employee e = new Manager();
    e.CalculatePay();
    • new ile gizleme
    • virtual + override çağrısı
    • static metot çağrısı
    • sealed sınıf çağrısı
    Cevabı göster

    virtual + override çağrısı — Doğru. virtual + override çifti runtime'da Manager.CalculatePay'i çağırır.

  2. Tip kalıbı için operatör

    if (e ____ Manager m) { m.Bonus = 1000; }
    Cevabı göster
    if (e is Manager m) { m.Bonus = 1000; }

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