0Pricing
C# Academy · Ders

Çok biçimlilik ve dinamik gönderim

Çok biçimliliği anlayın: sanal üyeleri temel tür başvurusu üzerinden çağırın, temel tür koleksiyonlarını kullanın, yöntem gizlemeden kaçının ve gerektiğinde güvenle tür dönüştürün.

Çok biçimlilik ve dinamik gönderim, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 3 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 3 dersten oluşur.

Çok biçimliliğe genel bakış

Amaç: Tek bir temel tür kullanın ve türetilen türlerin davranışı özelleştirmesine izin verin.

  • Temel reference, türetilen nesne
  • virtual + override → dinamik dağıtım
  • Temel türle yazılmış koleksiyonlar
  • new yöntemi gizlemesinden kaçının

Dinamik dağıtımın temelleri

Bir virtual yöntemi çağırmak, değişkenin derleme zamanı türünü değil, nesnenin çalışma zamanı türünü kullanır.

using System;

public class Animal
{
  public virtual string Speak() { return "???"; }
}

public class Cat : Animal
{
  public override string Speak() { return "Meow"; }
}

public class Dog : Animal
{
  public override string Speak() { return "Woof"; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Animal a1 = new Cat(); // base reference
    Animal a2 = new Dog();
    Console.WriteLine(a1.Speak()); // Meow
    Console.WriteLine(a2.Speak()); // Woof
  }
}

Koleksiyonlarda çok biçimlilik

Farklı türetilen türleri bir List<Base> içinde depolayın ve virtual üyeleri aynı biçimde çağırın.

using System;
using System.Collections.Generic;

public class Shape
{
  public virtual double Area() { return 0.0; }
}

public class Rectangle : Shape
{
  private readonly int _w, _h;
  public Rectangle(int w, int h) { _w = w; _h = h; }
  public override double Area() { return _w * _h; }
}

public class Circle : Shape
{
  private readonly int _r;
  public Circle(int r) { _r = r; }
  public override double Area() { return 3.14159 * _r * _r; }
}

public class Program
{
  public static void Main(string[] args)
  {
    List<Shape> shapes = new List<Shape>();
    shapes.Add(new Rectangle(3, 4));
    shapes.Add(new Circle(2));

    foreach (Shape s in shapes)
    {
      Console.WriteLine("Area = " + s.Area()); // calls correct override
    }
  }
}

Gizleme ve override karşılaştırması

Yöntem gizlemesinden (new) kaçının. Gerçek çok biçimlilik için override kullanın; gizleme, temel reference üzerinden temel sürümü çağırır.

using System;

public class Printer
{
  public virtual void Print() { Console.WriteLine("[Base]"); }
}

public class LoudPrinter : Printer
{
  public override void Print() { Console.WriteLine("[LOUD]"); }
}

public class HiddenPrinter : Printer
{
  // Hides the base method instead of overriding (BAD fit for polymorphism)
  public new void Print() { Console.WriteLine("[HIDDEN]"); }
}

public class Program
{
  public static void Main(string[] args)
  {
    Printer a = new LoudPrinter();
    Printer b = new HiddenPrinter();

    a.Print(); // [LOUD]  (override works)
    b.Print(); // [Base]  (hiding fails via base reference)
  }
}

Güvenli dönüştürme (as + kontrol)

Temel/virtual çağrıları tercih edin. Türetilen türe özgü üyeleri kullanmanız gerekiyorsa güvenli biçimde dönüştürün (as + null denetimi).

using System;

public class Vehicle
{
  public virtual string Info() { return "Vehicle"; }
}

public class Car : Vehicle
{
  public bool HasAirConditioning;
  public override string Info() { return "Car"; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Vehicle v = new Car();
    Console.WriteLine(v.Info()); // polymorphic call

    // Need a Car-only member? Cast carefully using 'as'
    Car c = v as Car;
    if (c != null)
    {
      c.HasAirConditioning = true;
      Console.WriteLine("AC set: " + c.HasAirConditioning);
    }
    else
    {
      Console.WriteLine("Not a Car");
    }
  }
}

Çok biçimlilik ipuçları

İpuçları:

  • Öncelikle temel/virtual çağrılara göre tasarlayın.
  • Davranışı değiştirmek için new yerine override kullanın.
  • Temel APIs öğelerini küçük ve kararlı tutun.
  • Nadiren dönüştürün; çok biçimliliği veya arayüzleri tercih edin.

Dinamik dağıtımın anlamı

Hızlı kontrol: C#'ta dinamik dağıtım ne anlama gelir?

Özet

Özet: Çok biçimlilik, virtual/override aracılığıyla tek bir temel çağrının birçok türetilen davranışa ulaşmasını sağlar. Temel türle yazılmış koleksiyonları kullanın, new ile gizlemeden kaçının ve yalnızca gerektiğinde dönüştürme yapın.

Sıkça Sorulan Sorular

“Çok biçimlilik ve dinamik gönderim” dersi ücretsiz mi?

Evet — “Çok biçimlilik ve dinamik gönderim” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 3 dersten oluşur.

“Çok biçimlilik ve dinamik gönderim” dersinde ne öğreneceğim?

Çok biçimliliği anlayın: sanal üyeleri temel tür başvurusu üzerinden çağırın, temel tür koleksiyonlarını kullanın, yöntem gizlemeden kaçının ve gerektiğinde güvenle tür dönüştürün. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 3 dersinin 3. dersidir.

“Çok biçimlilik ve dinamik gönderim” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. virtual/override/sealed ve soyut sınıflar
  2. Arayüzlere giriş ve birden çok arayüz uygulama
  3. Çok biçimlilik ve dinamik gönderim
← C# Academy Sayfasına Dön