الأحد، 8 ديسمبر 2013

أساسيات البرمجة سي شارب مشغل الحمل الزائد C# - Operator Overloading

أساسيات البرمجة مشغل الحمل الزائد C# - Operator Overloading

الحمل الزائد للمشغل:-

المشغل Operator  هو الاداة التي تستخدم  في العمليات الحسابية او المنطقية  الي اخره من المشغلات او المعاملات.الحمل الزائد يعني اعادة تعريف المشغل مع قيم مختلفة من الوسطاء اوالباراميترات.الحمل الزائد للمشغل يجب ان يستخدم الكلمة المحجوزة Static.

مثال على تطبيق الحمل الزائد للمشغل الجمع(+).

using System;

namespace OperatorOvlApplication
{
   class Box
   {
      private double length;      // طول الصندوق
      private double breadth;     // عرض الصندوق
      private double height;      // ارتفاع الصندوق

      public double getVolume()
      {
         return length * breadth * height;
      }
      public void setLength( double len )
      {
         length = len;
      }

      public void setBreadth( double bre )
      {
         breadth = bre;
      }

      public void setHeight( double hei )
      {
         height = hei;
      }
      // الحمل الزائد  لمشغل الجمع لجمع الصندوق 1 +2
      public static Box operator+ (Box b, Box c)
      {
         Box box = new Box();
         box.length = b.length + c.length;
         box.breadth = b.breadth + c.breadth;
         box.height = b.height + c.height;
         return box;
      }

   }

   class Tester
   {
      static void Main(string[] args)
      {
         Box Box1 = new Box();         // الاعلان عن الصندوق1 مننوع صندوق
         Box Box2 = new Box();         //الاعلان عن الصندوق2 من نوع صندوق
         Box Box3 = new Box();         //الاعلان عن الصندوق3 من نوع صندوق
         double volume = 0.0;          // لتخزين قيمة حجم الصندوق

         // تفاصيل الصندوق1
         Box1.setLength(6.0);
         Box1.setBreadth(7.0);
         Box1.setHeight(5.0);

         // تفاصيل الصندوق2
         Box2.setLength(12.0);
         Box2.setBreadth(13.0);
         Box2.setHeight(10.0);

         // حساب حجم الصندوق1
         volume = Box1.getVolume();
         Console.WriteLine("Volume of Box1 : {0}", volume);

         //حساب حجم الصندوق2
         volume = Box2.getVolume();
         Console.WriteLine("Volume of Box2 : {0}", volume);

         // جمع الصندوق 1 و الصندق 2
         Box3 = Box1 + Box2;

         // حجم الصندوق 3
         volume = Box3.getVolume();
         Console.WriteLine("Volume of Box3 : {0}", volume);
         Console.ReadKey();
      }
   }
}

ناتج الحمل الزائد للمشغل

Volume of Box1 : 210
Volume of Box2 : 1560
Volume of Box3 : 5400


ليس جميع المشغلات يمكن عمل لها  حمل زائد Overloading

الجدول التالي يوضح المشغلات التي يمكن عمل حمل زائد والتي لا يمكن عمل حمل زائد.

المشغلالحالة
+, -, !, ~, ++, --نعم يمكن عمل حمل زائد
+, -, *, /, %نعم يمكن عمل حمل زائد
==, !=, <, >, <=, >=نعم يمكن عمل حمل زائد
&&, ||نعم يمكن عمل حمل زائد
+=, -=, *=, /=, %=لا يمكن عمل حمل زائد
=, ., ?:, ->, new, is, sizeof, typeofلا يمكن عمل حمل زائد


مثال موسع على  الحمل الزائد للمشغلات.

using System;

namespace OperatorOvlApplication
{
    class Box
    {
       private double length;      // طول الصندوق
       private double breadth;     // عرض الصندوق
       private double height;      // ارتفاع الصندوق
      
       public double getVolume()
       {
         return length * breadth * height;
       }
      public void setLength( double len )
      {
          length = len;
      }

      public void setBreadth( double bre )
      {
          breadth = bre;
      }

      public void setHeight( double hei )
      {
          height = hei;
      }
      // جمعالحمل الزائد للمشغل ال
      public static Box operator+ (Box b, Box c)
      {
          Box box = new Box();
          box.length = b.length + c.length;
          box.breadth = b.breadth + c.breadth;
          box.height = b.height + c.height;
          return box;
      }
      
      public static bool operator == (Box lhs, Box rhs)
      {
          bool status = false;
          if (lhs.length == rhs.length && lhs.height == rhs.height 
             && lhs.breadth == rhs.breadth)
          {
              status = true;
          }
          return status;
      }
      public static bool operator !=(Box lhs, Box rhs)
      {
          bool status = false;
          if (lhs.length != rhs.length || lhs.height != rhs.height 
              || lhs.breadth != rhs.breadth)
          {
              status = true;
          }
          return status;
      }
      public static bool operator <(Box lhs, Box rhs)
      {
          bool status = false;
          if (lhs.length < rhs.length && lhs.height 
              < rhs.height && lhs.breadth < rhs.breadth)
          {
              status = true;
          }
          return status;
      }

      public static bool operator >(Box lhs, Box rhs)
      {
          bool status = false;
          if (lhs.length > rhs.length && lhs.height 
              > rhs.height && lhs.breadth > rhs.breadth)
          {
              status = true;
          }
          return status;
      }

      public static bool operator <=(Box lhs, Box rhs)
      {
          bool status = false;
          if (lhs.length <= rhs.length && lhs.height 
              <= rhs.height && lhs.breadth <= rhs.breadth)
          {
              status = true;
          }
          return status;
      }

      public static bool operator >=(Box lhs, Box rhs)
      {
          bool status = false;
          if (lhs.length >= rhs.length && lhs.height 
             >= rhs.height && lhs.breadth >= rhs.breadth)
          {
              status = true;
          }
          return status;
      }
      public override string ToString()
      {
          return String.Format("({0}, {1}, {2})", length, breadth, height);
      }
   
   }
    
   class Tester
   {
      static void Main(string[] args)
      {
        Box Box1 = new Box();          // التصريح عن الصندوق1
        Box Box2 = new Box();          // التصريح عن الصندوق2
        Box Box3 = new Box();          // التصرح عن الصندوق3ي
        Box Box4 = new Box();
        double volume = 0.0;   // تخزين القيمة

        // قيم الصندوق1
        Box1.setLength(6.0);
        Box1.setBreadth(7.0);
        Box1.setHeight(5.0);

        // قيم صندوق2
        Box2.setLength(12.0);
        Box2.setBreadth(13.0);
        Box2.setHeight(10.0);

       //طباعة الصندوق
        Console.WriteLine("Box 1: {0}", Box1.ToString());
        Console.WriteLine("Box 2: {0}", Box2.ToString());
        
        // حساب حجم الصندوق 1
        volume = Box1.getVolume();
        Console.WriteLine("Volume of Box1 : {0}", volume);

        // حساب حجم الصندوق2
        volume = Box2.getVolume();
        Console.WriteLine("Volume of Box2 : {0}", volume);

        // جمع الصندوق1+2
        Box3 = Box1 + Box2;
        Console.WriteLine("Box 3: {0}", Box3.ToString());
        // حساب حجم الصندوق3
        volume = Box3.getVolume();
        Console.WriteLine("Volume of Box3 : {0}", volume);

        //مقارنة الصناديق
        if (Box1 > Box2)
          Console.WriteLine("Box1 is greater than Box2");
        else
          Console.WriteLine("Box1 is  greater than Box2");
        if (Box1 < Box2)
          Console.WriteLine("Box1 is less than Box2");
        else
          Console.WriteLine("Box1 is not less than Box2");
        if (Box1 >= Box2)
          Console.WriteLine("Box1 is greater or equal to Box2");
        else
          Console.WriteLine("Box1 is not greater or equal to Box2");
        if (Box1 <= Box2)
          Console.WriteLine("Box1 is less or equal to Box2");
        else
          Console.WriteLine("Box1 is not less or equal to Box2");
        if (Box1 != Box2)
          Console.WriteLine("Box1 is not equal to Box2");
        else
          Console.WriteLine("Box1 is not greater or equal to Box2");
        Box4 = Box3;
        if (Box3 == Box4)
          Console.WriteLine("Box3 is equal to Box4");
        else
          Console.WriteLine("Box3 is not equal to Box4");

        Console.ReadKey();
      }
    }
}

ناتج الكود السابق

Box 1: (6, 7, 5)
Box 2: (12, 13, 10)
Volume of Box1 : 210
Volume of Box2 : 1560
Box 3: (18, 20, 15)
Volume of Box3 : 5400
Box1 is not greater than Box2
Box1 is less than Box2
Box1 is not greater or equal to Box2
Box1 is less or equal to Box2
Box1 is not equal to Box2
Box3 is equal to Box4











Ahmed Ata Almahallawi
Freelancer
IT
IT Help Desk,
SEO experience,PHP,C#,ASPX
Al alami st
gaza -jabaliaGaza Strip
Palestine
ahmed.almahallawi@gmail.com

DOB: 05/10/1984
by +Ahmed Almahallawi 


8/12/2013

التسميات: