พฤติกรรมแบบพหุรูปแบบ
ใช้พหุรูปแบบผ่านอินเทอร์เฟซ: ประมวลผลรูปทรงหลากหลายชนิดอย่างสม่ำเสมอ เพิ่มรูปทรงใหม่โดยไม่ต้องแก้ผู้เรียกใช้ และประกอบพฤติกรรมขนาดเล็กเข้าด้วยกัน
พฤติกรรมแบบพหุรูปแบบ เป็นบทเรียน 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 ประมวลผลรายการแบบผสม และเพิ่มรูปทรงได้โดยไม่ต้องแก้โค้ดที่เรียกใช้งาน ประกอบพฤติกรรมขนาดเล็กสำหรับการจัดรูปแบบหรือการกรอง เพื่อให้โค้ดยืดหยุ่น
คำถามที่พบบ่อย
บทเรียน “พฤติกรรมแบบพหุรูปแบบ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “พฤติกรรมแบบพหุรูปแบบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การออกแบบ (อินเทอร์เฟซและการสืบทอด)
- การนำไปใช้งานและการทดสอบ
- พฤติกรรมแบบพหุรูปแบบ