English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تدریس مقدماتی C#

تدریس پیشرفته C#

C# مبتنی بر面向对象 (OOP)

بارگذاری عملگر در C#

شما می‌توانید عملگرهای داخلی C# را تعریف مجدد یا بارگذاری کنید. بنابراین، برنامه‌نویسان می‌توانند عملگرهای نوع تعریف شده کاربر را نیز استفاده کنند. بارگذاری عملگر یک تابع با نام خاص است که از کلیدواژه operator با پیروی از نماد عملگر تعریف شده. مانند سایر توابع، بارگذاری عملگر دارای نوع بازگشتی و لیست پارامترهاست.

مثلاً، به این تابع نگاه کنید:

العمليات العامة الثابتة Box operator+(Box b, Box c)
{
   Box box = new Box();
   طول box = طول b + طول c;
   عرض box = عرض b + عرض c;
   ارتفاع box = ارتفاع b + ارتفاع c;
   يعود box;
}

این تابع برای بارگذاری عملگر جمع (+) برای کلاس تعریف شده کاربر Box پیاده‌سازی شده است. آن دو ویژگی Box را به هم اضافه می‌کند و یک Box جدید با ویژگی‌های اضافه شده برمی‌گرداند.

پیاده‌سازی عملگر بارگذاری شده

برنامه زیر یک نمایش کامل از پیاده‌سازی است:

using System;
namespace OperatorOvlApplication
{
   class Box
   {
      private double length; // طول
      private double breadth; // عرض
      خاصة double ارتفاع; // الارتفاع
      العمليات العامة double getVolume()
      {
         يعود الطول * العرض * الارتفاع;
      }
      العمليات العامة void setLength(double len)
      {
         الطول = len;
      }
      العمليات العامة void setBreadth(double bre)
      {
         العرض = bre;
      }
      العمليات العامة void setHeight(double hei)
      {
         الارتفاع = hei;
      }
      // إعادة تعريف عمليات + لجمع اثنين من كائنات Box
      العمليات العامة الثابتة Box operator+(Box b, Box c)
      {
         Box box = new Box();
         طول box = طول b + طول c;
         عرض box = عرض b + عرض c;
         ارتفاع box = ارتفاع b + ارتفاع c;
         يعود box;
      }
   }
   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 است
         double volume = 0.0; // حجم
         // تفاصيل صندوق1
         صندوق1.setLength(6.0);
         صندوق1.setBreadth(7.0);
         صندوق1.setHeight(5.0);
         // تفاصيل صندوق2
         صندوق2.setLength(12.0);
         صندوق2.setBreadth(13.0);
         صندوق2.setHeight(10.0);
         // Box1 的体积
         volume = Box1.getVolume();
         Console.WriteLine("Box1 的体积: {0}", volume);
         // Box2 的体积
         volume = Box2.getVolume();
         Console.WriteLine("Box2 的体积: {0}", volume);
         // 把两个对象相加
         Box3 = Box1 + Box2;
         // Box3 的体积
         volume = Box3.getVolume();
         Console.WriteLine(٢ٯ٤٨٩ ٤٨٩٢ٯ ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩);
         Console.ReadKey();
      }
   }
}

عندما يتم تجميع وكود التنفيذ، سيتم إنتاج النتيجة التالية:

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

عملگرهای قابل بارگذاری و غیرقابل بارگذاری

جدول زیر توانایی‌های بارگذاری عملگر در C# را توضیح می‌دهد:

عملگرشرح
+, -, !, ~, ++, --این عملگرهای یکانی یک عملگر دارند و قابل بارگذاری هستند.
+, -, *, /, %این عملگرهای دودویی دو عملگر دارند و قابل بارگذاری هستند.
==, !=, <, >, <=, >=این عملگرهای مقایسه‌ای قابل بارگذاری هستند.
&&, ||این عملگرهای منطقی شرطی نمی‌توانند مستقیماً بارگذاری شوند.
+=, -=, *=, /=, %=این عملگرهای تخصیصی قابل بارگذاری نیستند.
=, ., ?:, ->, new, is, sizeof, typeofاین عملگرها قابل بارگذاری نیستند.

مثال آنلاین

باستناد به بحث فوق، بگذارید مثال بالا را گسترش دهیم و عملگرهای بیشتری را بارگذاری کنیم:

using System;
namespace OperatorOvlApplication
{
    class Box
    {
       private double length; // طول
       private double breadth; // عرض
       خاصة double ارتفاع; // الارتفاع
      
       العمليات العامة double getVolume()
       {
         يعود الطول * العرض * الارتفاع;
       }
      العمليات العامة void setLength(double len)
      {
          الطول = len;
      }
      العمليات العامة void setBreadth(double bre)
      {
          العرض = bre;
      }
      العمليات العامة void setHeight(double hei)
      {
          الارتفاع = hei;
      }
      // إعادة تعريف عمليات + لجمع اثنين من كائنات Box
      العمليات العامة الثابتة Box operator+(Box b, Box c)
      {
          Box box = new Box();
          طول box = طول b + طول c;
          عرض box = عرض b + عرض c;
          ارتفاع box = ارتفاع b + ارتفاع c;
          يعود box;
      }
      
      العمليات العامة الثابتة bool operator==(Box lhs, Box rhs)
      {
          bool status = false;
          إذا كان طول اليسار متساوي مع طول اليمين وأعلى اليسار متساوي مع أعلى اليسار 
             وعرض اليسار متساوي مع عرض اليمين)
          {
              status = true;
          }
          return status;
      }
      العمليات العامة الثابتة bool operator!=(Box lhs, Box rhs)
      {
          bool status = false;
          إذا كان طول اليسار غير متساوي مع طول اليمين أو أعلى اليسار غير متساوي مع أعلى اليسار 
              أو عرض اليسار غير متساوي مع عرض اليمين)
          {
              status = true;
          }
          return status;
      }
      العمليات العامة الثابتة bool operator<(Box lhs, Box rhs)
      {
          bool status = false;
          إذا كان طول اليسار أقل من طول اليمين وأعلى اليسار 
              وعرض اليسار أقل من عرض اليمين)
          {
              status = true;
          }
          return status;
      }
      العمليات العامة الثابتة bool operator>(Box lhs, Box rhs)
      {
          bool status = false;
          إذا كان طول اليسار أكبر من طول اليمين وأعلى اليسار أقل من أعلى اليمين 
              > rhs.height && lhs.breadth > rhs.breadth)
          {
              status = true;
          }
          return status;
      }
      public static bool operator <=(صندوق lhs, صندوق 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 >=(صندوق lhs, صندوق 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)
      {
        صندوق Box1 = new صندوق(); // إعلان Box1، نوعه صندوق
        صندوق Box2 = new صندوق(); // إعلان Box2، نوعه صندوق
        صندوق Box3 = new صندوق(); // إعلان Box3، نوعه صندوق
        صندوق Box4 = new صندوق();
        double volume = 0.0; // الحجم
        // تفاصيل صندوق1
        صندوق1.setLength(6.0);
        صندوق1.setBreadth(7.0);
        صندوق1.setHeight(5.0);
        // تفاصيل صندوق2
        صندوق2.setLength(12.0);
        صندوق2.setBreadth(13.0);
        صندوق2.setHeight(10.0);
       // استخدم "ToString()" المعدل لعرض صندوقين
        Console.WriteLine("صندوق1: {0}", صندوق1.ToString());
        Console.WriteLine("Box2: {0}", Box2.ToString());
        
        // Box1 的体积
        volume = Box1.getVolume();
        Console.WriteLine("Box1 的体积: {0}", volume);
        // Box2 的体积
        volume = Box2.getVolume();
        Console.WriteLine("Box2 的体积: {0}", volume);
        // 把两个对象相加
        Box3 = Box1 + Box2;
        Console.WriteLine("Box3: {0}", Box3.ToString());
        // Box3 的体积
        volume = Box3.getVolume();
        Console.WriteLine(٢ٯ٤٨٩ ٤٨٩٢ٯ ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩);
        //٢ٯ٤٨٩ ٤٨٩٢ٯ٤٨٩
        if ٢ٯ٤٨٩ ٢ٯ ٤٨٩);
          Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩);
        else
          Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩);
        if ٢ٯ٤٨٩ ٢ٯ ٤٨٩);
          Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩);
        else
          Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩);
        if ٢ٯ٤٨٩ ٢ٯ ٤٨٩);
          Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩);
        else
          Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩);
        if ٢ٯ٤٨٩ ٢ٯ ٤٨٩);
          Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩);
        else
          Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩);
        if ٢ٯ٤٨٩ ٢ٯ ٤٨٩);
          Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٤٨٩);
        else
          Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٤٨٩);
        ٤٨٩ ٢ٯ ٤٨٩ ٤٨٩ ٢ٯ ٤٨٩;
        if ٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٢ٯ ٤٨٩);
          Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٤٨٩٤٨٩٤٨٩);
        else
          Console.WriteLine(٢ٯ٤٨٩ ٢ٯ ٤٨٩ ٤٨٩٤٨٩٤٨٩);
        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