Latest web development tutorials

C # المشغل إثقال

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

على سبيل المثال، والنظر في وظيفة التالية:

العام المشغل صندوق ثابت + (صندوق ب، ص ج)
{
   مربع مربع = مربع جديد ()؛
   box.length = b.length + c.length.
   box.breadth = b.breadth + c.breadth.
   box.height = b.height + c.height.
   مربع العودة؛
}

وظيفة أعلاه هو صندوق فئة المعرفة من قبل المستخدم ينفذ عامل الجمع (+). فمن يتم إضافة خاصية كائنين مربع، والكائنات صندوق عودة المضافة.

المشغل الحمولة الزائدة لتحقيق

يوضح البرنامج التالي التنفيذ الكامل:

باستخدام نظام.

مساحة OperatorOvlApplication
{
   الطبقة صندوق
   {
      طول الخاص مزدوج؛ // طول اتساع المزدوج الخاص؛ // الإرتفاع المزدوج الخاص؛ // الارتفاع العامة مزدوجة getVolume ()
      {
         طول عودة * اتساع * الارتفاع.
      }
      setLength الفراغ الجمهور (ليون مزدوج)
      {
         طول = ليون.
      }

      setBreadth الفراغ الجمهور (الف مزدوج)
      {
         اتساع = الف.
      }

      setHeight الفراغ الجمهور (التعليم العالي مزدوج)
      {
         ارتفاع = مؤسسات التعليم العالي.
      }
      // مثقله + مشغل لمجموع مربع كائنين العام المشغل صندوق ثابت + (صندوق ب، ص ج)
      {
         مربع مربع = مربع جديد ()؛
         box.length = b.length + c.length.
         box.breadth = b.breadth + c.breadth.
         box.height = b.height + c.height.
         مربع العودة؛
      }

   }

   اختبار الطبقة
   {
      ساكنة باطلة الرئيسية (سلسلة [] وسائط)
      {
         مربع Box1 = جديد مربع ()؛ // إعلان Box1، نوع مربع
         مربع Box2 = جديد مربع ()؛ // إعلان Box2، نوع مربع
         مربع Box3 = جديد مربع ()؛ // إعلان Box3، نوع مربع
         حجم مزدوج = 0.0؛ // // Box1 حجم بالتفصيل Box1.setLength (6.0)؛
         Box1.setBreadth (7.0)؛
         Box1.setHeight (5.0)؛

         // Box2 تفاصيل Box2.setLength (12.0)؛
         Box2.setBreadth (13.0)؛
         Box2.setHeight (10.0)؛

         // حجم Box1 من حجم = Box1.getVolume ()؛
         Console.WriteLine ( "حجم Box1: {0}"، وحدة التخزين).

         // حجم Box2 من حجم = Box2.getVolume ()؛
         Console.WriteLine ( "حجم Box2: {0}"، وحدة التخزين).

         وأضاف // إن الكائنين Box3 = Box1 + Box2.

         // حجم Box3 من حجم = Box3.getVolume ()؛
         Console.WriteLine ( "حجم Box3: {0}"، وحدة التخزين).
         Console.ReadKey ()؛
      }
   }
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

حجم Box1: 210
حجم Box2: 1560
حجم Box3: 5400

مشغلي يمكن إعادة تحميل وغير مثقلة

يصف الجدول التالي قدرة الحمولة الزائدة C # المشغل:

运算符描述
+, -, !, ~, ++, --这些一元运算符只有一个操作数,且可以被重载。
+, -, *, /, %这些二元运算符带有两个操作数,且可以被重载。
==, !=, <, >, <=, >=这些比较运算符可以被重载。
&&, ||这些条件逻辑运算符不能被直接重载。
+=, -=, *=, /=, %=这些赋值运算符不能被重载。
=, ., ?:, ->, new, is, sizeof, typeof这些运算符不能被重载。

أمثلة

للاطلاع على المناقشة المذكورة أعلاه، دعونا تمديد المثال أعلاه، ومشغلي أكثر مثقلة:

باستخدام نظام.

مساحة OperatorOvlApplication
{
    الطبقة صندوق
    {
       طول الخاص مزدوج؛ // طول اتساع المزدوج الخاص؛ // الإرتفاع المزدوج الخاص؛ // الارتفاع العامة مزدوجة getVolume ()
       {
         طول عودة * اتساع * الارتفاع.
       }
      setLength الفراغ الجمهور (ليون مزدوج)
      {
          طول = ليون.
      }

      setBreadth الفراغ الجمهور (الف مزدوج)
      {
          اتساع = الف.
      }

      setHeight الفراغ الجمهور (التعليم العالي مزدوج)
      {
          ارتفاع = مؤسسات التعليم العالي.
      }
      // مثقله + مشغل لمجموع مربع كائنين العام المشغل صندوق ثابت + (صندوق ب، ص ج)
      {
          مربع مربع = مربع جديد ()؛
          box.length = b.length + c.length.
          box.breadth = b.breadth + c.breadth.
          box.height = b.height + c.height.
          مربع العودة؛
      }
      
      العام ثابت عامل منطقي == (LHS بالغرف، يمين مربع)
      {
          وضع منطقي = كاذبة؛
          إذا (lhs.length == rhs.length && lhs.height == rhs.height 
             && Lhs.breadth == rhs.breadth)
          {
              الحالة = صحيح.
          }
          عودة الوضع؛
      }
      العام ثابت عامل منطقي! = (LHS بالغرف، يمين مربع)
      {
          وضع منطقي = كاذبة؛
          إذا (lhs.length! = rhs.length || lhs.height! = rhs.height 
              || Lhs.breadth! = Rhs.breadth)
          {
              الحالة = صحيح.
          }
          عودة الوضع؛
      }
      العام مشغل منطقي ثابت <(LHS بالغرف، يمين مربع)
      {
          وضع منطقي = كاذبة؛
          إذا (lhs.length <rhs.length && lhs.height 
              <Rhs.height && lhs.breadth <rhs.breadth)
          {
              الحالة = صحيح.
          }
          عودة الوضع؛
      }

      العام مشغل منطقي ثابت> (LHS بالغرف، يمين مربع)
      {
          وضع منطقي = كاذبة؛
          إذا (lhs.length> rhs.length && lhs.height 
              > Rhs.height && lhs.breadth> rhs.breadth)
          {
              الحالة = صحيح.
          }
          عودة الوضع؛
      }

      العام مشغل منطقي ثابت <= (LHS بالغرف، يمين مربع)
      {
          وضع منطقي = كاذبة؛
          إذا (lhs.length <= rhs.length && lhs.height 
              <= Rhs.height && lhs.breadth <= rhs.breadth)
          {
              الحالة = صحيح.
          }
          عودة الوضع؛
      }

      العام مشغل منطقي ثابت> = (LHS بالغرف، يمين مربع)
      {
          وضع منطقي = كاذبة؛
          إذا (lhs.length> = rhs.length && lhs.height 
             > = Rhs.height && lhs.breadth> = rhs.breadth)
          {
              الحالة = صحيح.
          }
          عودة الوضع؛
      }
      ToString سلسلة تجاوز العام ()
      {
          العودة String.Format ( "({0}، {1}، {2})"، طول، عرض، ارتفاع)؛
      }
   
   }
    
   اختبار الطبقة
   {
      ساكنة باطلة الرئيسية (سلسلة [] وسائط)
      {
        مربع Box1 = جديد مربع ()؛ // إعلان Box1، نوع مربع
        مربع Box2 = جديد مربع ()؛ // إعلان Box2، نوع مربع
        مربع Box3 = جديد مربع ()؛ // إعلان Box3، نوع مربع
        مربع Box4 = جديد مربع ()؛
        حجم مزدوج = 0.0؛ // // Box1 حجم بالتفصيل Box1.setLength (6.0)؛
        Box1.setBreadth (7.0)؛
        Box1.setHeight (5.0)؛

        // Box2 تفاصيل Box2.setLength (12.0)؛
        Box2.setBreadth (13.0)؛
        Box2.setHeight (10.0)؛

       // استخدم ToString زائد () يعرض صندوقين Console.WriteLine ( "Box1: {0}"، Box1.ToString ())؛
        Console.WriteLine ( "Box2: {0}"، Box2.ToString ())؛
        
        // حجم Box1 من حجم = Box1.getVolume ()؛
        Console.WriteLine ( "حجم Box1: {0}"، وحدة التخزين).

        // حجم Box2 من حجم = Box2.getVolume ()؛
        Console.WriteLine ( "حجم Box2: {0}"، وحدة التخزين).

        وأضاف // إن الكائنين Box3 = Box1 + Box2.
        Console.WriteLine ( "Box3: {0}"، Box3.ToString ())؛
        // حجم Box3 من حجم = Box3.getVolume ()؛
        Console.WriteLine ( "حجم Box3: {0}"، وحدة التخزين).

        // مقارنة مربعات
        إذا (Box1> Box2)
          Console.WriteLine ( "Box1 أكبر من Box2")؛
        آخر
          Console.WriteLine ( "Box1 ليس أكثر من Box2")؛
        إذا (Box1 <Box2)
          Console.WriteLine ( "Box1 أقل من Box2")؛
        آخر
          Console.WriteLine ( "Box1 لا يقل Box2")؛
        إذا (Box1> = Box2)
          Console.WriteLine ( "Box1 أكبر من أو يساوي Box2")؛
        آخر
          Console.WriteLine ( "Box1 ليس أكبر من أو يساوي Box2")؛
        إذا (Box1 <= Box2)
          Console.WriteLine ( "Box1 أقل Box2")؛
        آخر
          Console.WriteLine ( "Box1 لا يقل Box2")؛
        إذا (Box1! = Box2)
          Console.WriteLine ( "Box1 لا يساوي Box2")؛
        آخر
          Console.WriteLine ( "Box1 يساوي Box2")؛
        Box4 = Box3.
        إذا (Box3 == Box4)
          Console.WriteLine ( "Box3 يساوي Box4")؛
        آخر
          Console.WriteLine ( "Box3 لا يساوي Box4")؛

        Console.ReadKey ()؛
      }
    }
}

عندما يتم ترجمة التعليمات البرمجية أعلاه وتنفيذها، وتنتج النتائج التالية:

Box1: (6، 7، 5)
Box2: (12، 13، 10)
حجم Box1: 210
حجم Box2: 1560
Box3: (18، 20، 15)
حجم Box3: 5400
Box1 Box2 ليس أكثر من
Box1 Box2 أقل من
Box1 Box2 ليس أكبر من أو يساوي
Box1 Box2 أقل
Box1 Box2 لا تساوي
Box3 يساوي Box4