C#
Özet - Polimorfizm
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
-
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.
-
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; }
Sıradaki ders: Model tasarımı