C# – اضافه بار اپراتور (Operator Overloading)

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

مثال Overloading اپراتور + برای کلاس Box

در زیر نحوه پیاده‌سازی اپراتور + برای یک کلاس تعریف شده توسط کاربر Box (کلاس جعبه) آورده شده است:

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 پیاده‌سازی می‌کند. این تابع ویژگی‌های دو شیء Box را با هم جمع کرده و یک شیء Box جدید را برمی‌گرداند.

پیاده‌سازی Overloading اپراتورها

در برنامه زیر، پیاده‌سازی کامل اپراتور + و مقایسه برای کلاس Box (کلاس جعبه) را مشاهده می‌کنید:

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;
      }
      
      // Overload اپراتور + برای جمع دو شیء Box
      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;
      }

      // Overload اپراتور == برای مقایسه دو شیء 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;
      }

      // Overload اپراتور != برای مقایسه نابرابری دو شیء 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;
      }

      // Overload اپراتور < برای مقایسه کمتر بودن دو شیء 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;
      }

      // Overload اپراتور > برای مقایسه بزرگتر بودن دو شیء 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;
      }

      // Overload اپراتور <= برای مقایسه کمتر یا مساوی بودن دو شیء 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;
      }

      // Overload اپراتور >= برای مقایسه بزرگتر یا مساوی بودن دو شیء 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;
      }

      // Overload متد ToString برای نمایش اطلاعات جعبه
      public override string ToString() {
         return String.Format("({0}, {1}, {2})", length, breadth, height);
      }
   }

   class Tester {
      static void Main(string[] args) {
         Box Box1 = new Box();   // اعلام Box1 از نوع Box
         Box Box2 = new Box();   // اعلام Box2 از نوع Box
         Box Box3 = new Box();   // اعلام Box3 از نوع Box
         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);
         
         // نمایش جعبه‌ها با استفاده از متد ToString:
         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);
         
         // افزودن دو شیء به شرح زیر:
         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 not 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 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 (کلاس جعبه) نشان می‌دهد.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
Python - محدود کردن داده (MongoDB Limit)

Python – محدود کردن داده (MongoDB Limit)

Python MongoDB محدود کردن نتایج برای محدود کردن نتایج در MongoDB، از متد limit() استفاده می‌کنیم. متد limit() یک...

بیشتر بخوانید
Python - بروزرسانی (MongoDB Update)

Python – بروزرسانی (MongoDB Update)

به‌روزرسانی یک رکورد برای به‌روزرسانی یک رکورد یا سند در MongoDB، از متد update_one() استفاده می‌کنیم. پارامتر اول متد...

بیشتر بخوانید
Python - حذف کالکشن (MongoDB Drop Collection)

Python – حذف کالکشن (MongoDB Drop Collection)

حذف کالکشن شما می‌توانید یک جدول یا کالکشن در MongoDB را با استفاده از متد drop() حذف کنید. مثالحذف...

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.