0Pricing
C# Academy · บทเรียน

พฤติกรรมแบบพหุรูปแบบ

ใช้พหุรูปแบบผ่านอินเทอร์เฟซ: ประมวลผลรูปทรงหลากหลายชนิดอย่างสม่ำเสมอ เพิ่มรูปทรงใหม่โดยไม่ต้องแก้ผู้เรียกใช้ และประกอบพฤติกรรมขนาดเล็กเข้าด้วยกัน

พฤติกรรมแบบพหุรูปแบบ เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน

ภาพรวมพหุรูป

เป้าหมาย: ใช้ polymorphism เพื่อให้โค้ดที่เรียกใช้งานเรียบง่าย

  • ทำงานกับ IShape ในทุกที่
  • รวมรูปทรงหลายชนิดไว้ในรายการเดียว
  • เพิ่มรูปทรงใหม่โดยไม่ต้องแก้โค้ดเดิม
  • ประกอบพฤติกรรมขนาดเล็ก เช่น การจัดรูปแบบและการกรอง

ส่วนติดต่อเดียวสำหรับรูปทรงทั้งหมด

รับอินเทอร์เฟซ IShape ในเครื่องมือช่วยเหลือ การเลือกการนำไปใช้ที่ถูกต้องจะเกิดขึ้นขณะทำงาน

using System;

public interface IShape
{
  double Area();
  double Perimeter();
}

public sealed class Rectangle : IShape
{
  private readonly double _w, _h;
  public Rectangle(double w, double h) { _w = w; _h = h; }
  public double Area() { return _w * _h; }
  public double Perimeter() { return 2 * (_w + _h); }
}

public sealed class Circle : IShape
{
  private readonly double _r;
  public Circle(double r) { _r = r; }
  public double Area() { return 3.14159 * _r * _r; }
  public double Perimeter() { return 2 * 3.14159 * _r; }
}

public class Program
{
  // One function works for any IShape (dynamic dispatch on overrides)
  static void PrintSummary(IShape s)
  {
    Console.WriteLine("A=" + s.Area() + " P=" + s.Perimeter());
  }

  public static void Main(string[] args)
  {
    PrintSummary(new Rectangle(3, 4));
    PrintSummary(new Circle(2));
  }
}

การประมวลผลรายการแบบผสม

เก็บรูปทรงหลายชนิดไว้ใน List<IShape> การวนซ้ำยังคงเรียบง่าย ขณะที่พฤติกรรมจะแตกต่างกันไปตามแต่ละอินสแตนซ์

using System;
using System.Collections.Generic;

public interface IShape { double Area(); double Perimeter(); }

public sealed class Rectangle : IShape
{
  private readonly double _w, _h;
  public Rectangle(double w, double h) { _w = w; _h = h; }
  public double Area() { return _w * _h; }
  public double Perimeter() { return 2 * (_w + _h); }
}

public sealed class Circle : IShape
{
  private readonly double _r;
  public Circle(double r) { _r = r; }
  public double Area() { return 3.14159 * _r * _r; }
  public double Perimeter() { return 2 * 3.14159 * _r; }
}

public class Program
{
  public static void Main(string[] args)
  {
    List<IShape> shapes = new List<IShape>();
    shapes.Add(new Rectangle(2, 5));
    shapes.Add(new Circle(1.5));
    shapes.Add(new Rectangle(1, 1));

    foreach (IShape s in shapes)
    {
      Console.WriteLine("A=" + s.Area());
    }
  }
}

เปิดรับการขยาย

พหุรูปแบบรองรับการ ขยายเพิ่มเติม: รูปทรงใหม่สามารถนำมาใช้งานร่วมกันได้โดยไม่ต้องแก้โค้ดที่เรียกใช้งานอยู่

using System;

public interface IShape { double Area(); double Perimeter(); }

public sealed class Triangle : IShape
{
  private readonly double _a, _b, _c;
  public Triangle(double a, double b, double c) { _a = a; _b = b; _c = c; }
  public double Perimeter() { return _a + _b + _c; }
  public double Area()
  {
    double s = (_a + _b + _c) / 2.0;
    return Math.Sqrt(s * (s - _a) * (s - _b) * (s - _c));
  }
}

public class Program
{
  // Existing helper still works; no changes needed
  static void Show(IShape s) { Console.WriteLine("A=" + s.Area() + " P=" + s.Perimeter()); }

  public static void Main(string[] args)
  {
    Show(new Triangle(3, 4, 5)); // new type plugs in
  }
}

การประกอบพฤติกรรม (กลยุทธ์)

ประกอบพฤติกรรมขนาดเล็กผ่านอินเทอร์เฟซขนาดเล็ก เช่น ตัวจัดรูปแบบ คุณสามารถสลับกลยุทธ์ได้โดยไม่ต้องเปลี่ยนรูปทรง

using System;

public interface IShape { double Area(); double Perimeter(); }

public sealed class Rectangle : IShape
{
  private readonly double _w, _h;
  public Rectangle(double w, double h) { _w = w; _h = h; }
  public double Area() { return _w * _h; }
  public double Perimeter() { return 2 * (_w + _h); }
}

// Small strategy interface for formatting
public interface IShapeFormatter
{
  string Format(IShape s);
}

public sealed class SimpleFormatter : IShapeFormatter
{
  public string Format(IShape s) { return "A=" + s.Area() + " P=" + s.Perimeter(); }
}

public class Program
{
  static void Print(IShape s, IShapeFormatter f)
  {
    Console.WriteLine(f.Format(s));
  }

  public static void Main(string[] args)
  {
    Print(new Rectangle(3, 2), new SimpleFormatter());
  }
}

เคล็ดลับพหุรูป

เคล็ดลับ:

  • ส่ง IShape ให้เครื่องมือช่วยเหลือ และหลีกเลี่ยงการตรวจสอบชนิดข้อมูล
  • ทำให้เครื่องมือช่วยเหลือมีขนาดเล็กและไม่มีผลข้างเคียงเมื่อทำได้
  • เพิ่มรูปทรงใหม่ได้อย่างอิสระ โดยไม่แก้โค้ดที่เรียกใช้งานอยู่
  • ใช้อินเทอร์เฟซพฤติกรรมขนาดเล็ก เช่น การจัดรูปแบบและการกรอง เพื่อขยายความสามารถ

ประโยชน์ของอินเทอร์เฟซ

ตรวจสอบความเข้าใจ: ประโยชน์หลักของการเขียนโปรแกรมโดยอิงอินเทอร์เฟซ IShape ในไลบรารีนี้คืออะไร

ทบทวน

ทบทวน: รับพารามิเตอร์เป็น IShape ประมวลผลรายการแบบผสม และเพิ่มรูปทรงได้โดยไม่ต้องแก้โค้ดที่เรียกใช้งาน ประกอบพฤติกรรมขนาดเล็กสำหรับการจัดรูปแบบหรือการกรอง เพื่อให้โค้ดยืดหยุ่น

คำถามที่พบบ่อย

บทเรียน “พฤติกรรมแบบพหุรูปแบบ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “พฤติกรรมแบบพหุรูปแบบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “พฤติกรรมแบบพหุรูปแบบ”

ใช้พหุรูปแบบผ่านอินเทอร์เฟซ: ประมวลผลรูปทรงหลากหลายชนิดอย่างสม่ำเสมอ เพิ่มรูปทรงใหม่โดยไม่ต้องแก้ผู้เรียกใช้ และประกอบพฤติกรรมขนาดเล็กเข้าด้วยกัน คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน

บทเรียน “พฤติกรรมแบบพหุรูปแบบ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การออกแบบ (อินเทอร์เฟซและการสืบทอด)
  2. การนำไปใช้งานและการทดสอบ
  3. พฤติกรรมแบบพหุรูปแบบ
← กลับไปที่ C# Academy