0Pricing
C# Academy · درس

السلوكيات متعددة الأشكال

استخدم التعددية الشكلية القائمة على الواجهات: عالج الأشكال المختلطة بطريقة موحّدة، وأضف أشكالًا جديدة من دون تغيير المستدعين، وركّب سلوكيات صغيرة.

السلوكيات متعددة الأشكال درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 3 دروس في المجموع.

نظرة عامة على تعدد الأشكال

الهدف: استخدام تعدد الأشكال لإبقاء المتصلين بسيطين.

  • اعملوا باستخدام IShape في كل المواضع
  • اخلطوا العديد من الأشكال في قائمة واحدة
  • أضيفوا أشكالًا جديدة من دون تغيير الشيفرة
  • ركّبوا سلوكيات صغيرة (التنسيق والتصفية)

واجهة API واحدة لجميع الأشكال

اقبلوا واجهة 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
  }
}

تركيب السلوك (strategy)

ركّبوا سلوكيات صغيرة عبر واجهات صغيرة (مثل formatter). بدّلوا الاستراتيجيات من دون تغيير الشكل.

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، وعالجوا القوائم المختلطة، وأضيفوا الأشكال من دون المساس بالمتصلين. ركّبوا سلوكيات صغيرة للتنسيق أو التصفية للحفاظ على مرونة الشيفرة.

الأسئلة الشائعة

هل درس «السلوكيات متعددة الأشكال» مجاني؟

نعم — نص درس «السلوكيات متعددة الأشكال» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 3 دروس في المجموع.

ماذا ستتعلم في «السلوكيات متعددة الأشكال»؟

استخدم التعددية الشكلية القائمة على الواجهات: عالج الأشكال المختلطة بطريقة موحّدة، وأضف أشكالًا جديدة من دون تغيير المستدعين، وركّب سلوكيات صغيرة. تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟

لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.

كم من الوقت يستغرق درس «السلوكيات متعددة الأشكال»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟

نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. التصميم (الواجهات والوراثة)
  2. التنفيذ والاختبارات
  3. السلوكيات متعددة الأشكال
← العودة إلى C# Academy