Лучшее руководство по C # оператор перегрузкой в 2024 году. В этом руководстве вы можете изучить Перегрузка операторов для достижения,Пополняемые и не перегруженный операторы,примеров,

C # оператор перегрузкой

Вы можете переопределить или переопределить встроенный C # оператор. Таким образом, программисты могут использовать определяемые пользователем операторы типа. Перегруженные операторы , имеющие специальное имя функции, за которым следует ключевое словооператора определения символа оператора.И другие функции, перегруженные операторы имеют тип возвращаемого значения и список параметров.

Например, рассмотрим следующую функцию:

статический государственный оператор Box + (вставка б, коробка с)
{
   Коробка = новый ящик ();
   box.length = b.length + c.length;
   box.breadth = b.breadth + c.breadth;
   box.height = b.height + c.height;
   вернуть коробку;
}

Выше функция определенный пользователем класс Box реализует оператор сложения (+). Это свойство двух объектов Box добавляются и добавил объекты возврата Box.

Перегрузка операторов для достижения

Следующая программа демонстрирует полную реализацию:

с помощью системы;

Пространство имен OperatorOvlApplication
{
   класс Box
   {
      частные двойной длины; // длина частный двойной ширины; // ширина частный двойной высоты; // высота общественный двойной getVolume ()
      {
         возвращение длина * ширина * высота;
      }
      общественного недействительными SetLength (двойная LEN)
      {
         длина = Len;
      }

      общественного недействительными setBreadth (двойной Зав)
      {
         ширина = гн;
      }

      общественного недействительными setHeight (двойной хей)
      {
         высота = хей;
      }
      // Перегруженный оператор + к сумме двух объектов Box оператора государственной статической Box + (вставка б, коробка с)
      {
         Коробка = новый ящик ();
         box.length = b.length + c.length;
         box.breadth = b.breadth + c.breadth;
         box.height = b.height + c.height;
         вернуть коробку;
      }

   }

   класс Tester
   {
      статической силы основных (String [] агдз)
      {
         Box Box1 = новая коробка (); // Объявляем BOX1, тип коробки
         Box Box2 = новая коробка (); // Объявляем BOX2, тип коробки
         Box 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
{
    класс Box
    {
       частные двойной длины; // длина частный двойной ширины; // ширина частный двойной высоты; // высота общественный двойной getVolume ()
       {
         возвращение длина * ширина * высота;
       }
      общественного недействительными SetLength (двойная LEN)
      {
          длина = Len;
      }

      общественного недействительными setBreadth (двойной Зав)
      {
          ширина = гн;
      }

      общественного недействительными setHeight (двойной хей)
      {
          высота = хей;
      }
      // Перегруженный оператор + к сумме двух объектов Box оператора государственной статической Box + (вставка б, коробка с)
      {
          Коробка = новый ящик ();
          box.length = b.length + c.length;
          box.breadth = b.breadth + c.breadth;
          box.height = b.height + c.height;
          вернуть коробку;
      }
      
      общественности статической BOOL оператор == (LHS Box, шк Box)
      {
          Статус BOOL = ложь;
          если (lhs.length == rhs.length && lhs.height == rhs.height 
             && Lhs.breadth == rhs.breadth)
          {
              статус = TRUE;
          }
          вернуть статус;
      }
      общественности статической BOOL оператор! = (LHS, коробка РИТ)
      {
          Статус BOOL = ложь;
          если (lhs.length! = rhs.length || lhs.height! = rhs.height 
              || Lhs.breadth! = Rhs.breadth)
          {
              статус = TRUE;
          }
          вернуть статус;
      }
      общественности статической BOOL оператор <(LHS Box, шк Box)
      {
          Статус BOOL = ложь;
          если (lhs.length <rhs.length && lhs.height 
              <Rhs.height && lhs.breadth <rhs.breadth)
          {
              статус = TRUE;
          }
          вернуть статус;
      }

      открытые статические оператор BOOL> (LHS Box, шк Box)
      {
          Статус BOOL = ложь;
          если (lhs.length> rhs.length && lhs.height 
              > Rhs.height && lhs.breadth> rhs.breadth)
          {
              статус = TRUE;
          }
          вернуть статус;
      }

      общественности статической BOOL оператор <= (LHS Box, шк Box)
      {
          Статус BOOL = ложь;
          если (lhs.length <= rhs.length && lhs.height 
              <= Rhs.height && lhs.breadth <= rhs.breadth)
          {
              статус = TRUE;
          }
          вернуть статус;
      }

      общественности статической BOOL оператор> = (Box LHS, РИТ Box)
      {
          Статус BOOL = ложь;
          если (lhs.length> = rhs.length && lhs.height 
             > = Rhs.height && lhs.breadth> = rhs.breadth)
          {
              статус = TRUE;
          }
          вернуть статус;
      }
      общественного переопределение строки ToString ()
      {
          вернуть String.Format ( "({0}, {1}, {2})", длина, ширина, высота);
      }
   
   }
    
   класс Tester
   {
      статической силы основных (String [] агдз)
      {
        Box Box1 = новая коробка (); // Объявляем BOX1, тип коробки
        Box Box2 = новая коробка (); // Объявляем BOX2, тип коробки
        Box Box3 = новая коробка (); // Объявляем box3, тип коробки
        Box 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
C # оператор перегрузкой
10/30