CodeBlanks Logo Icon CodeBlanks

Polimorfizmde pattern matching

C# kursu · Orta seviye · Ders 62/116

switch ifadeleri ve tip kalıpları ile polimorfik dağıtımı öğrenirsin.

switch ifade ve tip kalıpları

C#'ın modern switch ifadesi (switch expression) tip kalıplarıyla (type pattern) polimorfik dağıtımı ifade seviyesinde yapar. Bir Animal nesnesini türlere göre işleyen kod artık tek satırlık bir ifade olur.

Örnek: string sound = animal switch { Dog d => "Hav", Cat c => "Miyav", _ => "?" };. Burada Dog d bir tip kalıbıdır; eşleşirse d değişkeni nesneye bağlanır. _ ise varsayılan (discard) dalıdır. Switch ifadesi bir değer döndürdüğü için değişkene atanabilir.

when ile ek koşul

Bazen sadece türe bakmak yetmez; aynı tür içinde ek koşul gerekir. Bunun için when yan tümcesini kullanırsın. Dog d when d.Age > 5 şeklinde bir dal yalnızca yaşı 5'ten büyük köpekleri yakalar.

when, tip kalıbından sonra filtre uygular. Bu sayede daha ince ayırt edici dallar yazabilirsin. Sıralama önemlidir: yukarıdaki dallar önce denenir, eşleşen ilk dal çalışır. Varsayılan dalı her zaman en sona koy. Aksi halde derleyici uyarı verir.

Uygulama switch ifadesi ile ses üret

Animal sınıfı tanımla. Dog : Animal ve Cat : Animal sınıflarını tanımla. Program içinde static string Sound(Animal a) metodu yaz; switch ifadesi kullansın: Dog için "Hav", Cat için "Miyav", varsayılan için "?" döndürsün. Main içinde Dog, Cat, Animal nesneleriyle Sound çağırıp Console.WriteLine yaz.

Örnek çözümü göster
static string Sound(Animal a) { return a switch { Dog d => "Hav", Cat c => "Miyav", _ => "?" }; } yaz. Main'de Console.WriteLine(Sound(new Dog())); Console.WriteLine(Sound(new Cat())); Console.WriteLine(Sound(new Animal())); ekle.
Örnek çözüm:
using System;

class Animal { }
class Dog : Animal { }
class Cat : Animal { }

class Program
{
    static string Sound(Animal a)
    {
        return a switch
        {
            Dog d => "Hav",
            Cat c => "Miyav",
            _ => "?"
        };
    }

    static void Main()
    {
        Console.WriteLine(Sound(new Dog()));
        Console.WriteLine(Sound(new Cat()));
        Console.WriteLine(Sound(new Animal()));
    }
}

Kendini test et

  1. switch ifadesinde hangisi varsayılan daldır?

    var s = a switch {
        Dog d => "Hav",
        _ => "?"
    };
    • default =>
    • else =>
    • null =>
    • _ =>
    Cevabı göster

    _ => — Doğru. _ (discard) switch ifadesinde varsayılan daldır.

  2. Tip kalıbı ile değişken bağla

    if (animal ____ Dog d) { d.Bark(); }
    Cevabı göster
    if (animal is Dog d) { d.Bark(); }
  3. Desen parçasını anlamına eşle

    switch
    İfadeye göre dallanır
    =>
    Ok ifadesi
    is
    Tip kalıbı test eder
    when
    Ek koşul ekler

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