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

this

اكتب فئة Tin بحقل int اسمه size ومُنشئ Tin(int size) يضع this.size = size;. في Pine أبقِ Main وابنِ tin واحدًا بـ Tin t = new Tin(7);، ثم اكتب t.size. أبقِ النوعين في ملف التعليم نفسه حتى يبقى dotnet run بسيطًا. شغّل بـ dotnet run. يجب أن تُظهر الشاشة سطرًا واحدًا: 7. المعامل والحقل يشتركان في الاسم size. كلمة this تسمّي الحقل على الكائن حتى يصل التخزين إلى المكان الصحيح. استخدام this عندما تتصادم الأسماء هو ما تعلّمه هذه الصفحة. أبقِ اسم الفئة العامة البادئة Pine.

لماذا الاسم نفسه يحتاج this

في صفحة المُنشئات كان المعامل n والحقل size، فبقي size = n; واضحًا. هنا الاسمان كلاهما size. داخل المُنشئ، size العاري يعني المعامل. كتابة size = size; تنسخ المعامل على نفسه وتترك الحقل عند قيمته الافتراضية. حقل الكائن ما زال يحتاج كتابة. تلك الكتابة تضع this.size في الجانب الأيسر.
افتح ملف Pine. اسم فئة البدء يبقى Pine. هذه الصفحة لا تعيد تسمية البادئ. احذف أي بقايا Box b = new Box(4); إن كان استدعاء المُنشئات ذلك كل ما لديك في Main. احذف أي بقايا فئة Box. احذف أي سطر ReadLine. الملف الذي تحتفظ به لا ينتظر الكتابة.
خارج أقواس Pine المعقوفة — وما زلت في الملف نفسه — اكتب public class Tin. داخل الأقواس أعلن int size;. ثم اكتب المُنشئ: Tin(int size) { this.size = size; }. في هذه الصفحة لا يوجد Main داخل Tin. احفظ الملف قبل التشغيل.
اقرأ التعيين مرة أخرى. الجانب الأيمن size هو القيمة التي وصلت في المعامل — هنا 7. الجانب الأيسر this.size هو الحقل على الكائن قيد البناء. بعد تشغيل السطر، يحمل size ذلك الكائن القيمة 7. إن أسقطت this. وأبقيت size = size;، تُظهر الشاشة لاحقًا 0 لأن الحقل لم يتغيّر.

Tin with this in constructor

csharp
using System;

public class Tin
{
    int size;

    Tin(int size)
    {
        this.size = size;
    }
}

Pine يبني tin واحدًا

Pine يحتفظ بـ public static void Main(). داخل Main اكتب Tin t = new Tin(7); ثم Console.WriteLine(t.size);. الحجة 7 تصبح معامل المُنشئ size. المُنشئ يخزّنها بـ this.size = size;. في هذه الصفحة لا تحتاج سطرًا منفصلًا t.size = 7;. في هذه الصفحة لا تكتب Box b = new Box(4);. ذلك كان درس المُنشئات.

Pine builds one tin

csharp
using System;

public class Pine
{
    public static void Main()
    {
        Tin t = new Tin(7);
        Console.WriteLine(t.size);
    }
}

public class Tin
{
    int size;

    Tin(int size)
    {
        this.size = size;
    }
}

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

this.size و size جنبًا إلى جنب

جدول قصير يبقي الاسمين واضحين وأنت داخل المُنشئ.

📊 this.size vs size

Name What it means in Tin(int size)
size alone the parameter that entered the constructor
this.size the field on the object being built
this.size = size; store the parameter into the field
size = size; does not update the field
الجدول تذكير فقط. السطر المكتوب الذي تحتفظ به هو this.size = size; داخل المُنشئ، ثم في Pine عبارة Tin t = new Tin(7); وConsole.WriteLine(t.size);.

مقارنة مع صفحة المُنشئات

في صفحة المُنشئات عمل Box(int n) { size = n; } لأن n وsize كلمتان مختلفتان. ذلك الشكل ما زال يعمل. هذه الصفحة تستخدم عمدًا الكلمة نفسها مرتين حتى تحتاج this. عرض Box المتبقي مع size = n; درس آخر. لهذه الصفحة أبقِ Tin وPine وthis.size = size;.
كتابة Console.WriteLine(t); وحدها لا تُظهر 7 نظيفًا. اكتب Console.WriteLine(t.size); لترى الرقم المخزَّن. مرجع الكائن وحده ليس قيمة الحقل.
ما زال بإمكانك اختيار اسم معامل مختلف في أيام أخرى. هذا الدرس يختار أسماء متطابقة عمدًا. لا تخلط n وthis في عرض Tin نفسه على هذه الصفحة. مسار واحد واضح يكفي: أسماء متطابقة، this على الحقل، كتابة الحقل.

tinان يبقيان منفصلين

كل new Tin(...) يشغّل المُنشئ من جديد لكائن منفصل. يمكنك كتابة Tin a = new Tin(2); وTin b = new Tin(9);، ثم كتابة حقلي size كليهما. كل استدعاء يستخدم this.size = size; على كائنه. الكائنان لا يتشاركان خانة size واحدة. لا تحتاج صندوق كود ثانيًا لذلك الفحص — غيّر الأرقام في Pine بعد أن رأيت 7، أو أبقِ عرض الـ tin الواحد كالملف الذي تحفظه.
إن أظهر السطران كلاهما 0، فالمُنشئ ما زال بلا this في الجانب الأيسر. إن لم يجد البناء Tin أثناء تجميع Pine، تحقق أن public class Tin في الملف نفسه.

ماذا تترك هذه الصفحة لمتدات النسخة

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

يمكنك أن تعلن int size;، وتكتب Tin(int size) { this.size = size; }، وتبني بـ Tin t = new Tin(7); من Pine.Main. شغّل بـ dotnet run. الشاشة تظهر 7. كلمة this تسمّي حقل الكائن عندما يستخدم المعامل الاسم نفسه. مرّرت الرقم عند البناء، وخزّنه المُنشئ بـ this، وأثبتت الكتابة التخزين. فكّر في this كمؤشر إلى الكائن قيد البناء عندما يعني الاسم العاري المعامل بدلًا منه. Pine يبقى الباب الذي تفتحه بـ dotnet run. الصفحة التالية متدات النسخة، حيث تستخدم متدات على الكائن الحقول بعد أن يوجد الكائن أصلًا.
أبقِ رأس المُنشئ بلا void. أبقِ this. على الحقل. أبقِ الكتابة على t.size. هذه العادات الثلاث نقطة تفتيش هذه الصفحة قبل الانتقال.

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

جاهز للبدء

اختبر معرفتك

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

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

📝 التعليمات

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