المكررات (دليل البرمجة لـ #C)

المكرر عبارة عن أسلوب get accessorأو عامل تشغيل ينفذ تكرار مخصص عبر صفيف أو فئة مجموعة باستخدام الكلمة الأساسية yield. عبارة إرجاع yield تؤدي إلى إرجاع عنصر بتسلسل المصدر يتم إرجاعها مباشرةً إلى المستدعي قبل الوصول إلى العنصر التالي في تسلسل المصدر. على الرغم من أنك تقوم بكتابة المكرر كالأسلوب، يقوم المحول البرمجي بترجمته إلى فئة متداخلة أي تسلسل حالات. تحتفظ هذه الفئة بمكان المكرر طالما يستمر تنفيذ التكرار الحلقي foreach.

ملاحظة

لمشاهدة ما يقوم به المحول البرمجي في الخلفية، استخدم الأداة ILDASM.exe لعرض التعليمات البرمجية للغة المتوسطة (IL) الذي يتم إنشاؤها لأسلوب المكرر.

يتم استدعاء المكرر من التعليمات البرمجية للعميل باستخدام العبارة foreach. على سبيل المثال، يمكنك إنشاء مكرر لفئة تقوم بإرجاع العناصر في ترتيب عكسي أو تنفذ عملية على كل عنصر قبل أن يقوم المكرر بإرجاعه. عندما تقوم بإنشاء مكرر للفئة أو البنية لا يجب عليك تطبيق الواجهة IEnumerator بالكامل. عندما يكتشف المحول البرمجي المكرر الخاص بك، فإنه سيقوم تلقائياً بإنشاء الأساليب Current و MoveNext و Dispose من الواجهة IEnumerator أو IEnumerator<T>.

نظرة عامة حول المكررات

  • المكرر عبارة عن مقطع تعليمات برمجية تقوم بإرجاع سلسلة مرتبة من قيم من نفس النوع.

  • يمكن استخدام المكرر كنص أسلوب أو عامل تشغيل أو accessor get.

  • تستخدم التعليمات البرمجية للمكرر عبارة yield return لإرجاع كل عنصر على حدة. yield break تنهي التكرار.

  • يمكن تطبيق مكررات متعددة على الفئة. يجب على كل مكرر أن يحتوي على اسم فريد تماماً مثل أي عضو فئة ويمكن استدعاؤه عن طريق التعليمات البرمجية للعميل في عبارة foreach كما يلي: foreach(int x in SampleClass.Iterator2){}.

  • نوع إرجاع المكرر يجب أن يكون (IEnumerable أو IEnumerator أو IEnumerable<T> أو IEnumerator<T>).

  • المكررات هي أساس سلوك التنفيذ المؤجل في استعلامات LINQ.

الكلمة الأساسية yield تستخدم لتحديد القيمة أو القيم التي يتم إرجاعها. عند الوصول إلى العبارة yield return يتم تخزين الموقع الحالي. يتم إعادة التنفيذ من هذا الموقع وقت استدعاء المكرر مره أخرى.

المكررات مفيدة بشكل خاص مع فئات المجموعة، موفرتاً طريقة سهلة للتكرار عبر بنيات البيانات المعقدة كالأشجار الثنائية.

الأقسام ذات الصلة

لمزيد من المعلومات:

مثال

في هذا المثال، الفئة DaysOfTheWeek هي فئة مجموعة بسيطة تخزن أيام الأسبوع كسلاسل. بعد كل تكرار من التكرار الحلقي foreach يتم إرجاع السلسلة التالية في المجموعة.

public class DaysOfTheWeek : System.Collections.IEnumerable
{
    string[] days = { "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat" };

    public System.Collections.IEnumerator GetEnumerator()
    {
        for (int i = 0; i < days.Length; i++)
        {
            yield return days[i];
        }
    }
}

class TestDaysOfTheWeek
{
    static void Main()
    {
        // Create an instance of the collection class
        DaysOfTheWeek week = new DaysOfTheWeek();

        // Iterate with foreach
        foreach (string day in week)
        {
            System.Console.Write(day + " ");
        }
    }
}
// Output: Sun Mon Tue Wed Thr Fri Sat

مواصفات لغة #C

لمزيد من المعلومات، راجع مواصفات لغة #C. مواصفات اللغة هي المصدر النهائي لبناء جملة C# واستخدامها.

راجع أيضًا:

المرجع

عام (إرشادات برمجة C#)

المبادئ

دليل البرمجة لـ #C

موارد أخرى

حول المكررات