المسارات
/
C#
C#
/
المنهج
/
التحميل الزائد للعوامل
ال

التحميل الزائد للعوامل في C#

تمرينان

نبذة عن التحميل الزائد للعوامل

يمكن تكييف العوامل الحسابية وعوامل المقارنة الرئيسية كي تستخدمها في أصنافك وstruct الخاصة بك. ويُعرف هذا باسم التحميل الزائد للعوامل.

يناقش هذا المقال الصياغة بالتفصيل، وكذلك العوامل التي يمكن تحميلها زيادةً وتلك التي لا يمكن.

تأخذ معظم العوامل الصيغة التالية:

static <return type> operaator <operator symbols>(<parameters>);

وتأخذ عوامل التحويل الصيغة التالية:

static (explicit|implicit) operator <cast-to-type>(<cast-from-type> <parameter name>);

تتصرّف العوامل تمامًا كما تتصرّف الطرق الساكنة.

  • يحل رمز العامل محل معرّف الطريقة، وللعوامل معاملات ونوع إرجاع. وقواعد الأنواع الخاصة بالمعاملات ونوع الإرجاع تتبع حدسك، ويمكنك الاعتماد على المترجم لتزويدك بإرشادات مفصّلة.
  • في العمليات الثنائية، يأخذ المعامل الأول الوسيط الأيسر للعملية.
  • للعوامل توقيع يتكوّن من معاملين (في حالة العمليات الثنائية) ونوع إرجاع، أو من معامل واحد ونوع إرجاع في حالة العوامل الأحادية.
  • في العوامل الثنائية، يجب أن يكون أحد نوعي المعاملات هو نوع الصنف الذي تُعرَّف فيه.
  • في حالة تحويلات الأنواع، يجب أن يكون نوع المعامل أو نوع الإرجاع هو نوع الصنف الذي تُعرَّف فيه.
  • في عاملي الزيادة والنقصان، يجب أن يكون المعامل ونوع الإرجاع من نوع الصنف الذي تُعرَّف فيه.

أمثلة على الصياغة:

struct Point
{
    decimal x;
    decimal y;

    public static bool operator ==(Point pt, Point ptOther)
    {
        return pt.x == ptOther.x && pt.y == ptOther.y;
    }

    public static bool operator !=(Point pt, Point ptOther)
    {
        return !(pt == ptOther);
    }

    public static Point operator *(Point pt, decimal scale)
    {
        var ptNew = new Point();
        ptNew.x = pt.x * scale;
        ptNew.y = pt.y * scale;
        return ptNew;
    }

    public static implicit operator Point((decimal x, decimal y) xy)
    {
        var pt = new Point();
        pt.x = xy.x;
        pt.y = xy.y;
        return pt;
    }

    public static explicit operator (decimal x, decimal y)(Point pt)
    {
        return (pt.x, pt.y);
    }
}

غالبًا ما يكون من المفيد تنفيذ طريقة Equals() واستدعاؤها من العامل ==. وبالمثل، يمكنك لعمليات المقارنة تنفيذ الواجهة IComparable. وفي كلتا الحالتين، يمكنك قتل عصفورين بحجر واحد يزيد قليلًا عن حجر.

تجدر الإشارة إلى أنك لا تستطيع إنشاء عوامل من رموز ليست جزءًا من المجموعة القياسية للعوامل. ويمكنك استخدام الرموز الموجودة فقط لتلك العمليات التي ينص التوثيق على إمكانية تحميلها زيادةً. والعوامل التي يمكن تحميلها زيادةً مدرجة هنا.

لاحظ أن ترتيب المعاملات مهم عندما تختلف أنواعها. في الكود أعلاه، pt * 10m تعبير صالح، أما 10m * pt فلن يُترجَم.

المراجع

يشرح هذا التوثيق الخاص بـالتحميل الزائد للعوامل الصياغة بالتفصيل.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة

تعلّم التحميل الزائد للعوامل

التدريب مقفل

افتح 1 تمرين إضافي لممارسة التحميل الزائد للعوامل