0Pricing
C# Academy · درس

منشئو المجموعات

ادعموا تعبيرات المجموعات في الأنواع المخصّصة

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

الأنواع المخصصة في تعبيرات المجموعات

لا تقتصر تعبيرات المجموعات على الأنواع المضمنة. باستخدام السمة [CollectionBuilder]، يمكن إنشاء نوعك الخاص من خلال صيغة [...].

سمة CollectionBuilder

تطبّق [CollectionBuilder(typeof(Factory), "Create")] على نوع مجموعتك. وهي تحدد اسم أسلوب مصنع ثابت يستدعيه المترجم لإنشاء النسخ.

توقيع أسلوب الباني

يجب أن يكون أسلوب الباني static وأن يأخذ معاملًا واحدًا من النوع ReadOnlySpan<T> ويُرجع نوع مجموعتك. ويمرر المترجم العناصر في Span.

مجموعة مخصصة بسيطة

إليك مجموعة صغيرة غير قابلة للتغيير تفعّل الإنشاء باستخدام تعبيرات المجموعات عبر باني.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;

[CollectionBuilder(typeof(IntBagBuilder), "Create")]
class IntBag : IEnumerable<int> {
    private readonly int[] items;
    public IntBag(ReadOnlySpan<int> data) => items = data.ToArray();
    public IEnumerator<int> GetEnumerator() => ((IEnumerable<int>)items).GetEnumerator();
    IEnumerator IEnumerable.GetEnumerator() => items.GetEnumerator();
}

static class IntBagBuilder {
    public static IntBag Create(ReadOnlySpan<int> data) => new IntBag(data);
}

IntBag bag = [1, 2, 3];
foreach (int n in bag) Console.Write(n + " "); // 1 2 3
Console.WriteLine();

لماذا ReadOnlySpan؟

يتيح معامل Span للمترجم تمرير العناصر من دون تخصيص وسيط. وينسخها الباني إلى أي مساحة تخزين يحتاج إليها.

يجب أن يطبق IEnumerable

يجب أن يطبق نوع المجموعة IEnumerable<T>، بحيث يطابق نوع عنصر Span، حتى يعرف المترجم نوع العنصر ويتمكن من التحقق من صحة الاستخدام.

البناة العامة

يمكن أن تكون البناة عامة، بحيث تدعم MyCollection<T>. ويأخذ أسلوب الباني ReadOnlySpan<T> ويُرجع MyCollection<T>.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;

[CollectionBuilder(typeof(BoxBuilder), "Create")]
class Box<T> : IEnumerable<T> {
    private readonly T[] items;
    public Box(ReadOnlySpan<T> d) => items = d.ToArray();
    public IEnumerator<T> GetEnumerator() => ((IEnumerable<T>)items).GetEnumerator();
    IEnumerator IEnumerable.GetEnumerator() => items.GetEnumerator();
}

static class BoxBuilder {
    public static Box<T> Create<T>(ReadOnlySpan<T> d) => new Box<T>(d);
}

Box<string> b = ["x", "y"];
foreach (var s in b) Console.Write(s + " "); // x y
Console.WriteLine();

فائدة المجموعات غير القابلة للتغيير

تستخدم مجموعات .NET غير القابلة للتغيير، مثل ImmutableArray<T>، البناة لدعم تعبيرات المجموعات. وينشئ الباني النسخة المثبتة من Span.

using System;
using System.Collections.Immutable;

ImmutableArray<int> nums = [1, 2, 3];
Console.WriteLine(nums.Length); // 3

تعمل عناصر النشر أيضًا

بمجرد أن يتوفر لنوع ما باني، تعمل عناصر النشر تلقائيًا داخل تعبيرات مجموعاته، لأن المترجم يظل ينتج Span واحدًا من العناصر.

using System;
using System.Collections.Immutable;

ImmutableArray<int> a = [1, 2];
ImmutableArray<int> all = [..a, 3, 4];
Console.WriteLine(all.Length); // 4

متى تضيف بانيًا؟

أضف [CollectionBuilder] عندما توفّر مجموعة مخصصة وتريد أن يستفيد المتصلون من صيغة [...] الموجزة، ولا سيما مع حاويات غير قابلة للتغيير أو متخصصة.

جمع المفاهيم

يتكون الباني من ثلاثة أجزاء فقط: السمة، ونوع يطبق IEnumerable<T>، وأسلوب Create(ReadOnlySpan<T>) ثابت. وباستخدام هذه الأجزاء، يصبح نوعك هدفًا أصيلًا لتعبيرات المجموعات.

تحقق سريع

تأكد من متطلبات باني المجموعة.

مراجعة

لقد تعلمت كيفية دعم الأنواع المخصصة لتعبيرات المجموعات.

  • طبّق [CollectionBuilder(typeof(Factory), "Create")] على النوع.
  • المصنع أسلوب static يأخذ ReadOnlySpan<T>.
  • يجب أن يطبق النوع IEnumerable<T>.
  • بهذه الطريقة تقبل ImmutableArray<T> الصيغة [...].

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

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

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

ماذا ستتعلم في «منشئو المجموعات»؟

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

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

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

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

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

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

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

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

  1. صيغة تعبيرات المجموعات
  2. عنصر النشر
  3. تحديد نوع المجموعات وفقًا للهدف
  4. منشئو المجموعات
← العودة إلى C# Academy