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

الكائنات

اكتب فئة اسمها Chip بمتد beep يكتب ok. المتد ليس static في هذه الصفحة. في Pine أبقِ Main وابنِ chip واحدًا بـ Chip c = new Chip();، ثم استدعِ c.beep();. أبقِ النوعين في ملف التعليم نفسه حتى يبقى dotnet run بسيطًا. شغّل بـ dotnet run. يجب أن تُظهر الشاشة سطرًا واحدًا: ok. كلمة new تبني كائنًا واحدًا من الفئة. المتغير c يحتفظ بذلك الكائن. تستدعي beep على c، لا على اسم الفئة وحدها. ذلك الكائن المبني — والاستدعاء الذي يستخدمه — هو ما تعلّمه هذه الصفحة. أبقِ اسم الفئة العامة البادئة Pine.

كائن واحد من الفئة

الفئة ما زالت النوع المسمّى. الكائن قيمة واحدة مبنية من ذلك النوع. السطر new Chip() يطلب من C# بناء تلك القيمة. تخزّنها في متغير نوعه Chip، ثم تستخدم المتغير للوصول إلى المتدات التي تخص كل كائن.
افتح ملف Pine. اسم فئة البدء يبقى Pine. هذه الصفحة لا تعيد تسمية البادئ. احذف أي بقايا Badge.show(); إن كان ذلك الاستدعاء static كل ما لديك في Main. احذف أي بقايا استدعاء ذاتي لـ down. احذف أي سطر ReadLine. الملف الذي تحتفظ به لا ينتظر الكتابة.
خارج أقواس Pine المعقوفة — وما زلت في الملف نفسه — اكتب public class Chip. داخل Chip اكتب void beep() — بلا كلمة static على هذا الرأس. الجسم سطر كتابة واحد: Console.WriteLine("ok");. أبقِ void. المتد لا يُرجع رقمًا. لا يوجد Main داخل Chip في هذه الصفحة. احفظ الملف قبل التشغيل.
البرنامج المعبأ الأول يعرض Chip وحده لتقرأ النوع بوضوح. البرامج المعبأة التالية هي الأشكال المحتفظ بها مع Pine يبني chip واحدًا، ثم اثنين.

Chip with beep

csharp
using System;

public class Chip
{
    void beep()
    {
        Console.WriteLine("ok");
    }
}

Pine يبني الـ chip ثم يستدعي beep

Pine يحتفظ بـ public static void Main(). داخل Main اكتب سطرين: أولًا Chip c = new Chip();، ثم c.beep();. السطر الأول يعلن متغيرًا c من نوع Chip ويملأه بكائن جديد. السطر الثاني يستدعي beep على ذلك الكائن. النقطة تأتي بعد اسم المتغير، لا بعد اسم الفئة وحدها. في هذه الصفحة لا تكتب Badge.show();. ذلك كان الاستدعاء static من درس الفئات.

Pine builds one chip

csharp
using System;

public class Pine
{
    public static void Main()
    {
        Chip c = new Chip();
        c.beep();
    }
}

public class Chip
{
    void beep()
    {
        Console.WriteLine("ok");
    }
}

اقرأ الملف المحتفظ به من الأعلى. using System; يجهّز أسماء قصيرة. public class Pine هو البادئ. public static void Main() حيث يبدأ وقت التشغيل. العبارة new Chip() تبني كائنًا واحدًا. ذلك الكائن يُخزَّن في c. الاستدعاء c.beep() يدخل beep لذلك الكائن. المتد يكتب ok ويعود. ثم ينتهي Pine. الكلمة على الشاشة جاءت من متد الكائن، بعد أن بنى new الكائن.
شغّله بـ dotnet run. البرنامج يكتب سطرًا واحدًا ويتوقف. لا ينتظر منك الكتابة. إن انتظر dotnet run، فما زال ReadLine في الملف. احذف ذلك السطر وأبقِ في Pine السطرين Chip c = new Chip(); وc.beep();، مع beep داخل Chip. الشاشة تظهر ok. إن أظهرت الشاشة ready، فما زال استدعاء متبقٍ لـ Badge.show(); يعمل. إن أظهرت حروف Chip، فسطر الكتابة فيه علامات اقتباس: Console.WriteLine("Chip");. لا تعيد تثبيت .NET SDK من أجل شاشة تعرض السطر الخطأ.
امشِ التشغيل مرة أخرى بالترتيب. C# يبدأ عند Pine.Main. الجملة الأولى تبني كائنًا بـ new Chip() وتخزّنه في c. الجملة الثانية تستدعي c.beep(). داخل beep، يكتب WriteLine قيمة ok. ثم تنتهي beep، ولا يبقى شيء في Main، فينتهي البرنامج. لم تضع Console.WriteLine("ok"); داخل Pine في هذه الصفحة. وضعته تحت Chip وطلبته عبر متغير الكائن.
فكّر في الفئة كمخطط في الملف، وفي الكائن كقطعة مبنية في الذاكرة لهذا التشغيل. كل new Chip() يبني قطعة أخرى. المتغير يسمّي القطعة حتى تصل إليها الأسطر اللاحقة. بلا ذلك الاسم، القطعة المبنية لا تملك مقبضًا لـ beep في هذه الصفحة.

لماذا الاستدعاء عبر c لا عبر Chip وحدها

في صفحة الفئات كان يمكن استدعاء متد static بـ Badge.show() واسم النوع. هنا beep بلا كلمة static. C# يتوقع كائنًا أولًا. كتابة Chip.beep(); بلا كائن لا تطابق شكل المبتدئ في هذه الصفحة. ابنِ بـ new، أبقِ النتيجة في متغير، ثم استدعِ عبر ذلك المتغير.
إن كتبت فقط new Chip(); ولم تخزّنه، فقد بنيت كائنًا، لكن لم يبقَ اسم لاستدعاء beep. في هذه الصفحة أبقِ المتغير: Chip c = new Chip(); ثم c.beep();. المتغير هو طريقك إلى الكائن بعد انتهاء new.
عرض static متبقٍ يمكن أن يشوّش Main. ملف ما زال يستدعي Badge.show(); هو شكل الدرس السابق. لهذه الصفحة أبقِ Chip وPine وسطر new. لا تحتاج Badge هنا.

كائنان، نداءان لـ beep

يمكنك بناء أكثر من كائن من الفئة نفسها. كل new Chip() يصنع كائنًا منفصلًا. كل كائن يمكنه تشغيل beep وحده. نص الفئة مشترك؛ الكائنات ليست القيمة نفسها.

Pine builds two chips

csharp
using System;

public class Pine
{
    public static void Main()
    {
        Chip a = new Chip();
        Chip b = new Chip();
        a.beep();
        b.beep();
    }
}

public class Chip
{
    void beep()
    {
        Console.WriteLine("ok");
    }
}

شغّل مرة أخرى بـ dotnet run. يجب أن تُظهر الشاشة سطرين: ok، ثم ok. السطر الأول جاء من a. الثاني جاء من b. كلاهما استخدم نص متد beep نفسه في Chip، لكن كل استدعاء جرى على كائن مختلف بُني بـ new.
إن أظهرت الشاشة ok واحدًا فقط، تحقق من وجود الاستدعاءين ومن بناء المتغيرين بـ new. كتابة Chip b = a; لا تبني كائنًا ثانيًا؛ تجعل b يشير إلى نفس كائن a. تلك الفكرة لصفحات لاحقة. في هذه الصفحة استخدم عبارتي new Chip() عندما تريد كائنين.
يمكنك إعادة تسمية المتغير من c إلى unit إن شئت: Chip unit = new Chip(); ثم unit.beep();. الشاشة تبقى ok ما دام جسم المتد يكتب تلك الكلمة. اسم المتغير لك؛ اسم النوع Chip وعبارة new Chip() يجب أن تتوافقا.

ما تتركه هذه الصفحة للحقول

هذه الصفحة لا تخزّن بعد رقمًا أو كلمة داخل الـ chip. الحقول — أسماء تحتفظ ببيانات على كل كائن — هي الصفحة التالية. هنا يوجد الكائن بعد new، ومتد العينة beep يكتب فقط. ذلك يكفي لرؤية الفصل بين الفئة كنوع والكائن كقيمة مبنية.
لا تُدرج Chip داخل أقواس Pine. في هذه الصفحة الفئتان أختان في الملف. متدات Chip داخل Chip. Main داخل Pine. يمكنك تغيير الكلمة المكتوبة داخل beep إلى ping وتشغيل مرة أخرى. يجب أن تتبع الشاشة السلسلة التي وضعتها في Chip. شكل new والاستدعاء في Pine يبقى كما هو.
إن لم يجد البناء Chip أثناء ترجمة Pine، تحقق أن public class Chip في الملف نفسه وأن سطر الفئة يقول حقًا Chip. إن لم يكتب التشغيل شيئًا، أكّد أن Main ما زال يستدعي c.beep(); بعد سطر new، وأن beep ما زال يحتوي WriteLine.

يمكنك كتابة Chip بـ void beep()، وبناء كائن بـ Chip c = new Chip();، واستدعاء c.beep(); من Pine.Main. شغّل بـ dotnet run. الشاشة تظهر ok. new Chip() ثانٍ يبني كائنًا آخر يمكنه أن يفعل beep وحده. فكّر في Chip كمخطط وكل new Chip() كقطعة مبنية تسمّيها. Pine يبقى الباب الذي تفتحه بـ dotnet run. الصفحة التالية هي الحقول، حيث يبدأ كل كائن بالاحتفاظ ببياناته المخزّنة.

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

جاهز للبدء

اختبر معرفتك

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

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

📝 التعليمات

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