0Pricing
C# Academy · Pelajaran

Polimorfisme dan pengiriman dinamis

Pahami polimorfisme: panggil anggota virtual melalui referensi dasar, gunakan koleksi bertipe dasar, hindari penyembunyian metode, dan lakukan casting dengan aman bila diperlukan.

Polimorfisme dan pengiriman dinamis adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 3 pelajaran total.

Ikhtisar polimorfisme

Tujuan: Gunakan satu tipe dasar dan biarkan tipe turunan menyesuaikan perilaku.

  • Reference dasar, objek turunan
  • virtual + override → pemanggilan dinamis
  • Koleksi bertipe dasar
  • Hindari penyembunyian metode dengan new

Dasar-dasar pemanggilan dinamis

Memanggil metode virtual menggunakan tipe objek pada waktu berjalan, bukan tipe variabel pada waktu kompilasi.

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
  }
}

Polimorfisme dalam koleksi

Simpan tipe turunan yang berbeda dalam List<Base> dan panggil anggota virtual secara seragam.

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
    }
  }
}

Penyembunyian dibandingkan dengan override

Hindari penyembunyian metode (new). Gunakan override untuk polimorfisme yang sebenarnya; penyembunyian memanggil versi dasar melalui reference dasar.

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)
  }
}

Konversi aman (as dan pemeriksaan)

Utamakan pemanggilan dasar/virtual. Jika Anda harus menggunakan anggota khusus turunan, lakukan konversi dengan aman (dengan pemeriksaan null).

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");
    }
  }
}

Kiat polimorfisme

Kiat:

  • Rancang terlebih dahulu untuk pemanggilan dasar/virtual.
  • Gunakan override, bukan new, untuk mengubah perilaku.
  • Buat APIs dasar tetap kecil dan stabil.
  • Jarang lakukan konversi; utamakan polimorfisme atau antarmuka.

Makna pemanggilan dinamis

Pemeriksaan singkat: Apa arti pemanggilan dinamis dalam C#?

Ringkasan

Ringkasan: Polimorfisme memungkinkan satu pemanggilan dasar menjangkau banyak perilaku turunan melalui virtual/override. Gunakan koleksi bertipe dasar, hindari penyembunyian dengan new, dan lakukan konversi hanya jika diperlukan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Polimorfisme dan pengiriman dinamis” gratis?

Ya — teks lengkap “Polimorfisme dan pengiriman dinamis” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 3 pelajaran total.

Apa yang akan aku pelajari di “Polimorfisme dan pengiriman dinamis”?

Pahami polimorfisme: panggil anggota virtual melalui referensi dasar, gunakan koleksi bertipe dasar, hindari penyembunyian metode, dan lakukan casting dengan aman bila diperlukan. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C# Academy?

Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 3.

Berapa lama pelajaran “Polimorfisme dan pengiriman dinamis” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?

Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. virtual/override/sealed; kelas abstrak
  2. Antarmuka (pengantar) dan implementasi beberapa antarmuka
  3. Polimorfisme dan pengiriman dinamis
← Kembali ke C# Academy