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

التحميل الزائد

ضع في صنف واحد دالتين تستخدمان الاسم paint. رأس الأولى static void paint(string word). ورأس الثانية static void paint(int n). الجسمان قصيران: الأول يكتب word والثاني يكتب n. من Main استدعِ paint("ok"); ثم paint(3);. يجب أن تُظهر الشاشة سطرين: ok في الأول و3 في الثاني. C# لا يعتبر paint الثانية تعارضًا. يرى الرأسين دالتين مختلفتين لأن قائمتي المعاملات تختلفان. ذلك الاسم المشترك مع قوائم مختلفة هو ما تعلّمه هذه الصفحة. أبقِ اسم الصنف العام Pine.

اسم واحد وقوائم مختلفة

حتى الآن كانت كل فكرة جديدة تستخدم اسم دالة جديدًا: ring وgreet وtwice. هنا يبقى الاسم paint عمدًا. ما يتغيّر هو ما بين الأقواس. قائمة تحمل string. وأخرى تحمل int. يحتفظ المترجم بالاثنتين لأن القائمتين ليستا متطابقتين.
افتح ملف Pine. اسم الصنف يبقى Pine. هذه الصفحة لا تعيد تسمية النوع. احذف أي عرض twice يعيد n * 2 إن كان ذلك كل ما لديك في Main. احذف أي بقايا greet. احذف أي سطر ReadLine. الملف الذي تحتفظ به لا ينتظر الكتابة.
خارج Main، وما زلت داخل أقواس الصنف المعقوفة، اكتب رأسي paint معًا. في هذه الصفحة أبقِ void: كل جسم يكتب، ولا حاجة لعودة قيمة إلى Main عبر return. الجسم الأول يستخدم Console.WriteLine(word);. والثاني يستخدم Console.WriteLine(n);. احفظ الملف قبل التشغيل. البرنامج الكامل الأول في الصندوق التالي.

الملف الذي تحتفظ به

هذه النسخة التي تشغّلها أولًا. Main يحمل استدعاءين. الصنف يحمل دالتي paint تشتركان في الاسم.

paint string and paint int

csharp
using System;

public class Pine
{
    public static void Main()
    {
        paint("ok");
        paint(3);
    }

    static void paint(string word)
    {
        Console.WriteLine(word);
    }

    static void paint(int n)
    {
        Console.WriteLine(n);
    }
}

اقرأها من الأعلى. using System; يجهّز أسماء قصيرة. public class Pine يسمّي النوع. public static void Main() حيث يبدأ وقت التشغيل. الاستدعاء الأول paint("ok"). الوسيط string، فيشغّل C# الجسم الذي يأخذ string word ويكتب ok. الاستدعاء الثاني paint(3). الوسيط int، فيشغّل C# الجسم الذي يأخذ int n ويكتب 3. الاسم paint نفسه في المرتين. القائمة داخل الأقواس هي ما يختار الجسم. سطران على الشاشة: ok ثم 3.

شغّله بـ dotnet run. البرنامج يكتب سطرين ويتوقف. لا ينتظر منك الكتابة. إن انتظر dotnet run، فما زال ReadLine في الملف. احذف ذلك السطر وأبقِ استدعاءي paint مع دالتي paint أعلاه. الشاشة تُظهر ok ثم 3. إن أظهر السطران ok، فربما أبقيت فقط دالة string وكتبت كلمة ثابتة لكل استدعاء. إن أظهر السطران 3، فربما أبقيت فقط دالة int. أبقِ الرأسين. إن أبلغ البناء أن paint معرّفة مسبقًا، تحقق هل للرأسين نفس القائمة — مثل نسختين من paint(string word). التحميل الزائد يحتاج فرقًا حقيقيًا في القائمة، لا نسخة ثانية من نفس الرأس باسم معامل مختلف فقط. لا تعيد تثبيت .NET SDK لشاشة تعرض أسطرًا خاطئة.

قائمة ثانية بكلمتين

عدد المعاملات يمكن أن يختلف أيضًا. أضف تحميلًا زائدًا ثالثًا يأخذ قيمتي string ويكتبهما في سطر واحد مع مسافة. أبقِ دالتي paint الأوليين في مكانهما عندما تتدرّب على الثلاث معًا. لعرض مركّز على هذا الشكل وحده، يمكنك استخدام ملف يحمل هذه القائمة فقط.

paint two strings

csharp
using System;

public class Pine
{
    public static void Main()
    {
        paint("hi", "sam");
    }

    static void paint(string a, string b)
    {
        Console.WriteLine(a + " " + b);
    }
}

هذا الملف الثاني. يعلّم العدد كفرق في القائمة. شغّل dotnet run. يجب أن تُظهر الشاشة سطرًا واحدًا: hi sam. الاستدعاء يحمل وسيطين. الدالة تحمل معاملين. ذلك التطابق يكفي لـ C# ليختار هذا الجسم. إن بقيت لديك paint(string word) وpaint(int n) السابقتان في نفس الصنف، يمكنك إبقاؤهما. استدعاء بقيمتي string لن يختار دالة string ذات الوسيط الواحد، لأن العدد يختلف.
عندما تضع التحميلات الثلاثة في ملف واحد للتدرّب، يمكن لـ Main أن يستدعي كل شكل في سطره. استدعاء بـ string واحد ما زال يذهب إلى paint(string word). استدعاء بـ int واحد ما زال يذهب إلى paint(int n). استدعاء بقيمتي string يذهب إلى paint(string a, string b). الاسم المشترك لا يمحو تلك الفروقات. بعد أن ترى hi sam، أعد الملف ذا الاستدعاءين إن كان ذلك الشكل الذي تريد حفظه: paint("ok"); ثم paint(3);.

قائمة فارغة بجانب قائمة string

دالة بأقواس فارغة قائمة مختلفة أيضًا. يمكنك إبقاء paint() بلا معاملات بجانب paint(string word). الاستدعاء الفارغ paint(); يشغّل جسم القائمة الفارغة. الاستدعاء paint("go"); يشغّل جسم string.

paint empty and paint string

csharp
using System;

public class Pine
{
    public static void Main()
    {
        paint();
        paint("go");
    }

    static void paint()
    {
        Console.WriteLine("ready");
    }

    static void paint(string word)
    {
        Console.WriteLine(word);
    }
}

هذا الملف الثالث. شغّل dotnet run. يجب أن تُظهر الشاشة ready في السطر الأول وgo في الثاني. الاستدعاء الأول لا شيء بين الأقواس، فيطابق paint(). الاستدعاء الثاني يرسل string، فيطابق paint(string word). إعادة تسمية واحدة إلى paintReady تُبنى أيضًا، لكن تلك مهارة أخرى. هذه الصفحة تبقي الاسم paint وتدع القوائم تحمل الفرق.

أي استدعاء يشغّل أي رأس

اقرأ الاستدعاءات بجانب الرؤوس. قائمة الوسائط في الاستدعاء يجب أن تناسب قائمة المعاملات في الرأس. النوع والعدد مهمان معًا في هذا الشكل للمبتدئين.

📊 call beside matching paint

Call in Main Header that runs Screen line
paint("ok"); paint(string word) ok
paint(3); paint(int n) 3
paint("hi", "sam"); paint(string a, string b) hi sam
paint(); paint() ready

خلط شائع هو كتابة دالتين تقولان كلتاهما paint(string word) وتتوقّع أن الثانية تُحسب تحميلًا زائدًا. تغيير اسم المعامل فقط إلى paint(string label) لا يخلق قائمة جديدة للمترجم. النوع والعدد هما ما يهم هنا. خلط آخر هو استدعاء paint(true) دون أن تكتب قائمة معاملات bool. عندها لا يجد البناء paint مطابقة. أضف رأسًا يأخذ النوع الذي تريد، أو غيّر الاستدعاء إلى نوع تدعمه أصلًا.
كتابة Console.WriteLine("paint"); في Main تكتب كلمة paint. لا تستدعي أي دالة. أبقِ paint("ok"); عندما تريد التحميل الزائد الذي يأخذ string. ترك دالة twice متبقية في نفس الملف يمكن أن يربك الشاشة إن بقي Main يكتب twice(7). صفِّ Main إلى استدعاءات paint التي تختبرها، وأبقِ فقط تحميلات paint الزائدة التي تحتاجها لذلك التشغيل.
لا تُدخل دالة paint داخل أقواس Main المعقوفة. الدوال تجلس داخل الصنف، بجانب Main. تحميلان زائدان دالتان شقيقتان في نفس جسم الصنف.

يمكنك إبقاء اسم دالة واحد وعدة قوائم معاملات في نفس الصنف. C# يختار الجسم من قائمة وسائط الاستدعاء. الشاشة تُظهر سطر الجسم المطابق. رأسان بنفس القائمة ليسا تحميلًا زائدًا. الصفحة التالية هي scope، حيث ترى أي أسماء تظهر داخل الدالة وأيها تبقى خارجها.

الشاشة تحمل الجسم المطابق

الملف الذي تحتفظ به يكتب ok ثم 3 عندما يستدعي Main paint("ok"); وpaint(3);. الاسم المشترك paint في كل استدعاء، وحروف paint ليست على الشاشة كتسمية مطبوعة إلا إن اقتبستها. إدخال دالة paint داخل Main ليس الشكل الذي يبنيه هذا الدرس.

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

جاهز للبدء

اختبر معرفتك

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

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

📝 التعليمات

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