جاري التحميل...

static

اكتب فئة Cup بحقل static اسمه int tally ومتد static اسمه void Mark() ينفّذ tally = tally + 1;. في Pine أبقِ Main واستدعِ Cup.Mark(); مرتين، ثم اكتب Cup.tally. أبقِ النوعين في ملف التعليم نفسه حتى يبقى dotnet run بسيطًا. نفّذ بـ dotnet run. يجب أن تُظهر الشاشة سطرًا واحدًا: 2. المتد يعمل عبر اسم الفئة، لا عبر متغير كائن. مشاركة tally واحد على الفئة هي ما تعلّمه هذه الصفحة. أبقِ اسم الفئة العامة البادئة Pine.

عضو يخص اسم الفئة

في صفحة متدات الكائن استدعيت j.bump() عبر متغير jar. هنا الحقل والمتد يجلسان على Cup نفسها. تصل إليهما بـ Cup.Mark() وCup.tally. لا تحتاج في هذه الصفحة إلى new Cup(...) لذلك الاستدعاء. كل استدعاء لـ Mark يضيف واحدًا إلى نفس tally.
افتح ملف Pine. اسم فئة البدء يبقى Pine. هذه الصفحة لا تعيد تسمية البادئ. احذف أي Jar j = new Jar(3); باقية إن كان عرض bump كل ما لديك في Main. احذف أي بقايا فئة Jar. احذف أي بقايا Tin. احذف أي سطر ReadLine. الملف الذي تحتفظ به لا ينتظر الكتابة.
خارج أقواس Pine المعقوفة — وما زلت في الملف نفسه — اكتب public class Cup. داخل الأقواس أعلن static int tally;. ثم اكتب المتد static: static void Mark() { tally = tally + 1; }. في هذه الصفحة لا مُنشئ ولا حقل كائن. احفظ الملف قبل التشغيل.
يحتاج رأس المتد كلا الكلمتين static وvoid. كلمة static تعلّم أن العضو يخص اسم الفئة. كلمة void ما زالت تعني أن Mark لا يُرجع قيمة للكتابة. أبقِ الكلمتين بهذا الترتيب في الرأس الذي تكتبه.

Cup with static Mark

csharp
using System;

public class Cup
{
    static int tally;

    static void Mark()
    {
        tally = tally + 1;
    }
}

Pine يستدعي Mark على اسم الفئة

Pine يحتفظ بـ public static void Main(). داخل Main اكتب ثلاثة أسطر بالترتيب: Cup.Mark();، ثم Cup.Mark(); مرة أخرى، ثم Console.WriteLine(Cup.tally);. كل استدعاء يضيف واحدًا. الكتابة تُظهر العدد المشترك. لا تكتب في هذه الصفحة Jar j = new Jar(3); ولا j.bump();. ذلك كان درس متدات الكائن.

Pine two Marks

csharp
using System;

public class Pine
{
    public static void Main()
    {
        Cup.Mark();
        Cup.Mark();
        Console.WriteLine(Cup.tally);
    }
}

public class Cup
{
    static int tally;

    static void Mark()
    {
        tally = tally + 1;
    }
}

اقرأ الملف المحتفظ به من الأعلى. using System; يجهّز أسماء قصيرة. public class Pine هو البادئ. public static void Main() حيث يبدأ وقت التشغيل — Main نفسه static أصلًا، لذلك يمكن للبرنامج أن يبدأ دون بناء كائن Pine أولًا. استدعاء Cup.Mark() يدخل Mark على الفئة. الجسم يكتب tally = tally + 1. الاستدعاء الأول ينقل tally من 0 إلى 1. الثاني ينقله إلى 2. ثم يكتب Main Cup.tally وتُظهر الشاشة 2.
شغّله بـ dotnet run. البرنامج يكتب سطرًا واحدًا ويتوقف. لا ينتظر منك الكتابة. إن انتظر dotnet run، فما زال ReadLine في الملف. احذف ذلك السطر وأبقِ في Pine استدعاءي Cup.Mark(); والكتابة، مع Mark في Cup. الشاشة تُظهر 2. إن أظهرت الشاشة 4 أو 5، فقد يعمل عرض بقايا Jar bump. إن أظهرت 0، قد تكون استدعاءات Mark غائبة أو تعمل بعد الكتابة.
إن كتبت Mark(); بلا Cup. أمامه من شكل Main هذا، يرفض البناء ما لم تضف توصيلًا إضافيًا لا تعلّمه هذه الصفحة. أبقِ Cup.Mark();. إن كتبت Cup c = new Cup(); ثم تحدّثت فقط عن متدات الكائن، فقد تركت درس static. هدف هذه الصفحة هو الاستدعاء عبر اسم الفئة.

مقارنة مع j.bump ومع بقايا Jar

في صفحة متدات الكائن احتاج j.bump() إلى كائن أمام الاسم. ذلك ما زال يعمل عندما تريد تغييرًا على jar واحد. في هذه الصفحة يحتاج Cup.Mark() إلى اسم الفئة أمام الاستدعاء. بقايا Jar j = new Jar(3); j.bump(); Console.WriteLine(j.fill); درس مختلف. لهذه الصفحة أبقِ Cup وPine وCup.Mark();.
ما زال بإمكانك لاحقًا اختراع متد كائن. هذا الدرس يبقي العداد المشترك على الفئة حتى يستدعيان بدون new ويشاركان tally واحدًا. كتابة Console.WriteLine(Cup); وحدها لا تُظهر 2 نظيفًا. اكتب Console.WriteLine(Cup.tally); لترى الرقم المخزَّن.

📊 j.bump مقابل Cup.Mark

شكل الاستدعاء يحتاج كائنًا؟ ما الذي يتغيّر
j.bump(); نعم — متغير jar fill ذلك الـ jar
Cup.Mark(); لا — استخدم اسم الفئة Cup.tally المشترك

tally واحد يشتركه كل استدعاء Mark

لا تبني كوبين لتحصل على علامتين في هذه الصفحة. Cup.Mark(); الأول وCup.Mark(); الثاني يلمسان نفس الحقل static. هذه نقطة static int tally. إن أضفت كائنات لاحقًا، ما زالت تشارك ذلك tally واحدًا ما لم تبتكر تصميمًا آخر. لملف التعليم يكفي استدعاءان عبر اسم الفئة.
إن كانت الشاشة ما زالت تُظهر 1، فربما يوجد استدعاء Mark واحد فقط، أو كتابة بين الاستدعاءين. أبقِ الاستدعاءين قبل Console.WriteLine(Cup.tally);. إن أظهرت الشاشة 7 أو رقمًا باقيًا آخر، فقد يبقى عرض Tin أو Jar قديم في الملف. أبقِ Cup.Mark(); مرتين والكتابة على Cup.tally.

أخطاء تُخفي استدعاء static

إزالة static من Mark تحوّله إلى متد كائن. عندها Cup.Mark(); من Main يفشل البناء، وتتوقف الصفحة عن تعليم الاستدعاء عبر اسم الفئة. أعد static على الحقل والمتد معًا. استدعاء j.bump(); فقط لأن ملف Jar ما زال مفتوحًا يُخفي هذا الدرس أيضًا — احذف ذلك العرض من Main عندما تتمرّن على Cup.
فخ آخر هو كتابة Cup.tally = Cup.tally + 1; فقط داخل Main وعدم كتابة Mark أبدًا. قد يطبع 2 بعد تعيينين، لكنه يتخطى شكل المتد static الذي تريد هذه الصفحة أن تكتبه. فضّل سطرين Cup.Mark(); حتى يملك جسم المتد عملية الجمع. إن عرض IntelliSense استدعاء كائن بعد new Cup()، تجاهله لهذا التمرين وابقَ مع Cup.Mark();.

ما تتركه هذه الصفحة لـ access

تصل هذه الصفحة إلى الأعضاء عبر اسم الفئة: Cup.Mark() وCup.tally. صفحة لاحقة — access — تُظهر كلمات مثل public وprivate التي تتحكم في من يرى العضو. ابقَ مع static هنا. لا تختلق كلمات access في كل سطر ما لم تكن تستخدمها أصلًا؛ هدف الدرس هو الاستدعاء عبر اسم الفئة والحقل المشترك.
لا تُدخل Cup داخل أقواس Pine. في هذه الصفحة تجلس الفئتان كأختين في الملف. إن لم يجد البناء Cup أثناء تجميع Pine، تحقق أن public class Cup في الملف نفسه. إن أظهرت الشاشة 0، فربما لم يعمل Mark أبدًا — أبقِ سطرَي Cup.Mark(); قبل الكتابة. إن اشتكى البناء أن Mark يحتاج كائنًا، تحقق أن رأس المتد ما زال يتضمّن static.

يمكنك إعلان static int tally;، وكتابة static void Mark() { tally = tally + 1; }، ومن Pine.Main تشغيل Cup.Mark(); مرتين، ثم كتابة Cup.tally. نفّذ بـ dotnet run. الشاشة تُظهر 2. عمل المتد static على اسم الفئة وغيّر الحقل المشترك. فكّر في Mark كفعل تستطيع الفئة نفسها فعله دون بناء cup أولًا. Pine يبقى الباب الذي تفتحه بـ dotnet run. الصفحة التالية هي access، حيث تُفتح بعض الأعضاء أو تُغلق عمدًا لبقية الكود.
أبقِ static على الحقل وعلى المتد. أبقِ اسم الفئة قبل الاستدعاء: Cup.Mark();. أبقِ الكتابة على Cup.tally. هذه العادات الثلاث هي نقطة التفتيش لهذه الصفحة قبل المتابعة. اترك عروض j.bump() الباقية خارج Main حتى لا تُظهر الشاشة رقم jar بالخطأ.

🧠 اختبر معرفتك

جاهز للبدء

اختبر معرفتك

تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع

❓
5
الأسئلة
🎯
70%
للنجاح
♾️
∞
الوقت
🔄
∞
المحاولات

📝 التعليمات

  • اقرأ كل سؤال بعناية
  • اختر أفضل إجابة لكل سؤال
  • يمكنك إعادة الاختبار عدة مرات كما تريد
  • سيتم عرض تقدمك في الأعلى