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

متدات الكائن

اكتب فئة Jar بحقل int اسمه fill، ومُنشئ Jar(int n) يضع fill = n;، ومتد كائن void bump() يشغّل fill = fill + 1;. في Pine أبقِ Main وابنِ jar واحدًا بـ Jar j = new Jar(3);، استدعِ j.bump();، ثم اكتب j.fill. أبقِ النوعين في ملف التعليم نفسه حتى يبقى dotnet run بسيطًا. شغّل بـ dotnet run. يجب أن تُظهر الشاشة سطرًا واحدًا: 4. المتد يعمل على ذلك الكائن الواحد ويغيّر حقله. استدعاء المتد عبر متغير الكائن هو ما تعلّمه هذه الصفحة. أبقِ اسم الفئة العامة البادئة Pine.

متد ينتمي إلى الكائن

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

Jar with bump method

csharp
using System;

public class Jar
{
    int fill;

    Jar(int n)
    {
        fill = n;
    }

    void bump()
    {
        fill = fill + 1;
    }
}

Pine يبني jar ويستدعي bump

Pine يحتفظ بـ public static void Main(). داخل Main اكتب ثلاثة أسطر بالترتيب: Jar j = new Jar(3);، ثم j.bump();، ثم Console.WriteLine(j.fill);. المُنشئ يخزّن 3. الاستدعاء j.bump() يضيف واحدًا. الكتابة تُظهر القيمة الجديدة. في هذه الصفحة لا تكتب Tin t = new Tin(7);. ذلك كان درس this.

Pine one bump

csharp
using System;

public class Pine
{
    public static void Main()
    {
        Jar j = new Jar(3);
        j.bump();
        Console.WriteLine(j.fill);
    }
}

public class Jar
{
    int fill;

    Jar(int n)
    {
        fill = n;
    }

    void bump()
    {
        fill = fill + 1;
    }
}

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

مقارنة مع this ومع تعيين حقل عادي

في صفحة this خزّنت حقلًا داخل المُنشئ بأسماء متطابقة. ذلك ما زال يعمل. هذه الصفحة تضيف متدًا يمكنك استدعاؤه لاحقًا، بعد أن يوجد الكائن. بقايا Tin t = new Tin(7); مع this.size = size; درس مختلف. لهذه الصفحة أبقِ Jar وPine وj.bump();.
ما زال بإمكانك كتابة j.fill = j.fill + 1; في Main. هذا الدرس ينقل ذلك التغيير إلى داخل bump حتى يحمل الكائن الفعل. كتابة Console.WriteLine(j); وحدها لا تُظهر 4 نظيفًا. اكتب Console.WriteLine(j.fill); لترى الرقم المخزَّن.

bumpان على jar واحد

يمكنك استدعاء j.bump(); مرتين قبل الكتابة. ابدأ بـ new Jar(3)، bump واحد إلى 4، bump ثانٍ إلى 5، ثم اكتب. ذلك الفحص يناسب عرض Pine صغيرًا ثانيًا.

Pine two bumps

csharp
using System;

public class Pine
{
    public static void Main()
    {
        Jar j = new Jar(3);
        j.bump();
        j.bump();
        Console.WriteLine(j.fill);
    }
}

public class Jar
{
    int fill;

    Jar(int n)
    {
        fill = n;
    }

    void bump()
    {
        fill = fill + 1;
    }
}

شغّل مرة أخرى بـ dotnet run. يجب أن تُظهر الشاشة 5. كل استدعاء لـ bump عمل على الكائن نفسه وأضاف واحدًا آخر. كتابة Jar k = j; لا تبني كائنًا ثانيًا — استخدم استدعاءَي new Jar(...) عندما تريد قيمتي fill منفصلتين. لهذه الصفحة، bumpان على jar واحد يكفيان لترى المتد يعمل مرتين.
إن أظهرت الشاشة ما زالت 3، فقد تكون استدعاءات bump غائبة أو ما زال Main يكتب قبل استدعائها. إن أظهرت 7 أو رقم بقايا آخر، فقد يكون عرض Tin قديم ما زال في الملف. أبقِ new Jar(3) واستدعاءات bump.

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

هذه الصفحة تستدعي المتد عبر كائن: j.bump(). صفحة لاحقة — static — تُظهر متدات وحقولًا تنتمي إلى اسم الفئة نفسه بلا كائن أمام الاسم. ابقَ مع استدعاء الكائن هنا. لا تخترع static void bump() في هذه الصفحة إلا إن كنت تعرفه مسبقًا؛ هدف الدرس هو الاستدعاء على الكائن.
لا تُداخل Jar داخل أقواس Pine المعقوفة. في هذه الصفحة الفئتان شقيقتان في الملف. إن لم يجد البناء Jar أثناء تجميع Pine، تحقق أن public class Jar في الملف نفسه. إن أظهرت الشاشة 0، فقد يكون المُنشئ بلا تخزين، أو لم يعمل bump أبدًا — أبقِ Jar(int n) { fill = n; } وj.bump(); قبل الكتابة.

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

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

جاهز للبدء

اختبر معرفتك

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

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

📝 التعليمات

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