کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش Overload کردن عملگرها در سی شارپ

دوره آموزش برنامه نویسی C#

کلیه حقوق مادی و معنوی این مقاله متعلق به آموزشگاه تحلیل داده می باشد و هر گونه استفاده غیر قانونی از آن پیگرد قانونی دارد.

آموزش Overload کردن عملگرها در سی شارپ

شما می توانید اکثر اپراتورهای موجود و داخلی در C# را دوباره تعریف یا overload کنید. بنابراین برنامه نویس می تواند از اپراتورهایی با نوع تعریف شده توسط کاربر نیز استفاده کند . اپراتورهای overload شده عملکردهایی هستند با نام های خاص که کلمه ی کلیدی operator با نمادی برای اپراتور تعریف شده دنبال می شود. مانند هر عملکرد دیگری یک اپراتور overload شده دارای یک نوع بازگشتی و یک لیست پارامتر می باشد.

 برای مثال به عملکرد زیر دقت کنید.

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;
        }

عملکرد بالا اپراتور جمع (+) را برای یک گروه Box تعریف شده توسط یوزر، اجرا می کند.

 اجرای overload کردن اپراتور

برنامه ی زیر اجرای کامل را نشان می دهد.

using System;
        namespace OperatorOvlApplication
        {
          
class Box
   {
             
private double length;      // Length of a box
       
      private double breadth;     // Breadth of a box
       
      private double height;      // Height of a box
       
      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;
              }
             
// Overload + operator to add two Box objects.
       
      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();         // Declare Box1 of type Box
       
         Box Box2 = new Box();         // Declare Box2 of type Box
       
         Box Box3 = new Box();         // Declare Box3 of type Box
       
         double volume = 0.0;          // Store the volume of a box here
       
         // box 1 specification
       
         Box1.setLength(6.0);
                 Box1.setBreadth(
7.0);
                 Box1.setHeight(
5.0);
                
// box 2 specification
       
         Box2.setLength(12.0);
                 Box2.setBreadth(
13.0);
                 Box2.setHeight(
10.0);
                
// volume of box 1
       
         volume = Box1.getVolume();
                 Console.WriteLine(
"Volume of Box1 : {0}", volume);
                
// volume of box 2
       
         volume = Box2.getVolume();
                 Console.WriteLine(
"Volume of Box2 : {0}", volume);
                
// Add two object as follows:
       
         Box3 = Box1 + Box2;
                
// volume of box 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
 

اپراتورهای قابل overload شدن و اپراتورهای غیرقابل overload شدن

 جدول زیر توانایی overload شدن اپراتورها را در C# توضیح می دهد.

Operators

Description

+, -, !, ~, ++, --

این عملگرهای یکانی یک عملوند می گیرند و می توانند overload شوند.

+, -, *, /, %

این عملگرهای دودویی یک عملوند می گیرند و می توانند overload شوند.

==, !=, <, >, <=, >=

این عملگر های مقایسه ای می توانند overload شوند.

&&, ||

عملگر های منطقی شرطی نمی توانند به طور مستقیم overload شوند.

+=, -=, *=, /=, %=

عملگرهای تخصیص نمی توانند overload شوند.

=, ., ?:, ->, new, is, sizeof, typeof

این عملگرهای نمی توانند overload شوند.

 

مثال

در ارتباط با مباحث قبلی اجازه دهید مثال قبل را گسترش داده و اپراتورهای بیشتری را overload کنیم.

using System;
        namespace OperatorOvlApplication
        {
           
class Box
    {
              
private double length;      // Length of a box
       
       private double breadth;     // Breadth of a box
       
       private double height;      // Height of a box
       
       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;
              }
             
// Overload + operator to add two Box objects.
       
      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();          // Declare Box1 of type Box
       
        Box Box2 = new Box();          // Declare Box2 of type Box
       
        Box Box3 = new Box();          // Declare Box3 of type Box
       
        Box Box4 = new Box();
               
double volume = 0.0;   // Store the volume of a box here
       
        // box 1 specification
       
        Box1.setLength(6.0);
                Box1.setBreadth(
7.0);
                Box1.setHeight(
5.0);
               
// box 2 specification
       
        Box2.setLength(12.0);
                Box2.setBreadth(
13.0);
                Box2.setHeight(
10.0);
             
//displaying the Boxes using the overloaded ToString():
       
        Console.WriteLine("Box 1: {0}", Box1.ToString());
                Console.WriteLine(
"Box 2: {0}", Box2.ToString());
               
// volume of box 1
       
        volume = Box1.getVolume();
                Console.WriteLine(
"Volume of Box1 : {0}", volume);
              
// volume of box 2
       
        volume = Box2.getVolume();
                Console.WriteLine(
"Volume of Box2 : {0}", volume);
              
// Add two object as follows:
       
        Box3 = Box1 + Box2;
                Console.WriteLine(
"Box 3: {0}", Box3.ToString());
               
// volume of box 3
       
        volume = Box3.getVolume();
                Console.WriteLine(
"Volume of Box3 : {0}", volume);
               
//comparing the boxes
       
        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
1394/07/27 9436 1747
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...