delegate وAction/Func والإغلاقات
مرّر السلوك عبر delegates: عرّف delegates مخصصة، واستخدم Action/Func المدمجتين، وتعرّف إلى كيفية التقاط lambdas للمتغيرات (الإغلاقات).
delegate وAction/Func والإغلاقات درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 1 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 3 دروس في المجموع.
نظرة عامة على المفوضات
الهدف: التعامل مع الأساليب باعتبارها بيانات.
- تعريف نوع مفوض
- استخدام Action/Func
- إنشاء تعبيرات lambda
- فهم الإغلاقات (المتغيرات الملتقطة)
أساسيات المفوضات المخصصة
المفوض هو مؤشر دالة آمن من ناحية النوع. عيّن أساليب متوافقة واستدعها كما تستدعي دالة.
using System;
// Custom delegate type: a method taking two ints and returning int
public delegate int Op(int x, int y);
public class Program
{
static int Add(int a, int b) { return a + b; }
static int Mul(int a, int b) { return a * b; }
public static void Main(string[] args)
{
Op f = Add; // method group conversion
Console.WriteLine(f(2, 3)); // 5
f = Mul;
Console.WriteLine(f(2, 3)); // 6
}
}
Action وFunc
يمثل Action الأساليب التي لا تُرجع قيمة؛ بينما يُرجع Func قيمة. استخدم مجموعات الأساليب أو تعبيرات lambda.
using System;
public class Program
{
static void Log(string s) { Console.WriteLine("LOG: " + s); }
public static void Main(string[] args)
{
Action<string> a = Log; // no return
a("hello");
Func<int, int, int> sum = delegate(int x, int y) { return x + y; }; // lambda/anon method
Console.WriteLine(sum(3, 4)); // 7
// Method group to Func
Func<string, int> len = GetLen;
Console.WriteLine(len("abc")); // 3
}
static int GetLen(string s) { return s == null ? 0 : s.Length; }
}
عرض توضيحي للإغلاقات
يلتقط الإغلاق المتغيرات من النطاق الخارجي. ويستمر المتغير في الوجود بعد انتهاء الأسلوب الذي أنشأ المفوض.
using System;
public class Program
{
public static void Main(string[] args)
{
int counter = 0; // captured variable (lives as long as delegate)
Action inc = delegate() { counter = counter + 1; Console.WriteLine(counter); };
inc(); // 1
inc(); // 2
Console.WriteLine("Final=" + counter); // 2
}
}
أسلوب عالي الرتبة
مرّر Func أو Action لتخصيص السلوك. وهذا أساس العديد من واجهات API (وLINQ).
using System;
public class Program
{
// Apply a transform to each number and sum the results
static int SumBy(int[] xs, Func<int, int> transform)
{
int total = 0;
for (int i = 0; i < xs.Length; i++)
{
total += transform(xs[i]);
}
return total;
}
public static void Main(string[] args)
{
int[] data = new int[] { 1, 2, 3 };
int sumSquares = SumBy(data, delegate(int x) { return x * x; });
Console.WriteLine(sumSquares); // 14
}
}
نصائح المفوضات
نصائح:
- فضّل Action/Func لتجنب إنشاء أنواع مفوضات مخصصة إضافية.
- اجعل تعبيرات lambda قصيرة وواضحة.
- انتبه إلى المتغيرات الملتقطة؛ فقد تتغير قيمتها لاحقًا.
- استخدم مجموعات الأساليب عندما يطابق أسلوب مسمى التوقيع بالفعل.
معنى Func مقابل Action
مراجعة
مراجعة: صرّح بالمفوضات، واستخدم Action/Func، واكتب تعبيرات lambda صغيرة. تتيح الإغلاقات لتعبيرات lambda التقاط المتغيرات المحلية—فاستخدمها بحذر.
الأسئلة الشائعة
هل درس «delegate وAction/Func والإغلاقات» مجاني؟
نعم — نص درس «delegate وAction/Func والإغلاقات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 3 دروس في المجموع.
ماذا ستتعلم في «delegate وAction/Func والإغلاقات»؟
مرّر السلوك عبر delegates: عرّف delegates مخصصة، واستخدم Action/Func المدمجتين، وتعرّف إلى كيفية التقاط lambdas للمتغيرات (الإغلاقات). تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 3.
كم من الوقت يستغرق درس «delegate وAction/Func والإغلاقات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- delegate وAction/Func والإغلاقات
- الأحداث: النشر والاشتراك، والكلمة المفتاحية event
- أنماط الأحداث ومشكلاتها (تسرّب الذاكرة)