Latest web development tutorials

C overloading # Operator

Anda dapat mendefinisikan ulang atau mengganti C # operator built-in. Oleh karena itu, programmer dapat menggunakan operator jenis yang ditetapkan pengguna. operator overload yang memiliki nama fungsi khusus, diikuti olehoperator kata kunci definisi simbol operator.Dan fungsi lainnya, operator kelebihan beban memiliki jenis kembali dan daftar parameter.

Sebagai contoh, perhatikan fungsi berikut:

public static Box operator + (Box b, Box c)
{
   Kotak kotak = new kotak ();
   box.length = b.length + c.length;
   box.breadth = b.breadth + c.breadth;
   box.height = b.height + c.height;
   kotak kembali;
}

Fungsi di atas adalah yang ditetapkan pengguna kelas Box mengimplementasikan operator Selain (+). Ini adalah milik dua benda Box ditambahkan, dan menambahkan kembali Box benda.

Operator overloading untuk mencapai

Program berikut menunjukkan pelaksanaan yang lengkap:

menggunakan System;

namespace OperatorOvlApplication
{
   kelas Box
   {
      panjang pribadi ganda; // panjang pribadi luasnya ganda; // lebar tinggi ganda pribadi; // tinggi publik ganda getVolume ()
      {
         panjang pulang * luasnya * tinggi;
      }
      public void setlength (double len)
      {
         panjang = len;
      }

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

      public void setHeight (double hei)
      {
         height = hei;
      }
      // Kelebihan beban + operator untuk jumlah dari dua Box objek public static Box operator + (Box b, Box c)
      {
         Kotak kotak = new kotak ();
         box.length = b.length + c.length;
         box.breadth = b.breadth + c.breadth;
         box.height = b.height + c.height;
         kotak kembali;
      }

   }

   kelas Tester
   {
      static void Main (string [] args)
      {
         Kotak Kotak1 = new kotak (); // mendeklarasikan Kotak1, jenis kotak
         Kotak box2 = new kotak (); // mendeklarasikan box2, jenis kotak
         Kotak box3 = new kotak (); // mendeklarasikan box3, jenis kotak
         ganda Volume = 0,0; // // Kotak1 volume yang merinci Box1.setLength (6,0);
         Box1.setBreadth (7,0);
         Box1.setHeight (5.0);

         // Box2 merinci Box2.setLength (12,0);
         Box2.setBreadth (13,0);
         Box2.setHeight (10,0);

         // Kotak1 volume Volume = Box1.getVolume ();
         Console.WriteLine ( "Volume Kotak1: {0}", volume);

         // Box2 volume Volume = Box2.getVolume ();
         Console.WriteLine ( "Volume box2: {0}", volume);

         // Dua benda ditambahkan box3 = Kotak1 + box2;

         // Box3 volume Volume = Box3.getVolume ();
         Console.WriteLine ( "Volume box3: {0}", volume);
         Console.ReadKey ();
      }
   }
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

Volume box1: 210
Volume box2: 1560
Volume box3: 5400

operator diisi ulang dan non-kelebihan beban

Tabel berikut menggambarkan kemampuan overloading C # Operator:

运算符描述
+, -, !, ~, ++, --这些一元运算符只有一个操作数,且可以被重载。
+, -, *, /, %这些二元运算符带有两个操作数,且可以被重载。
==, !=, <, >, <=, >=这些比较运算符可以被重载。
&&, ||这些条件逻辑运算符不能被直接重载。
+=, -=, *=, /=, %=这些赋值运算符不能被重载。
=, ., ?:, ->, new, is, sizeof, typeof这些运算符不能被重载。

contoh

Untuk pembahasan di atas, mari kita memperpanjang contoh di atas, operator lebih kelebihan beban:

menggunakan System;

namespace OperatorOvlApplication
{
    kelas Box
    {
       panjang pribadi ganda; // panjang pribadi luasnya ganda; // lebar tinggi ganda pribadi; // tinggi publik ganda getVolume ()
       {
         panjang pulang * luasnya * tinggi;
       }
      public void setlength (double len)
      {
          panjang = len;
      }

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

      public void setHeight (double hei)
      {
          height = hei;
      }
      // Kelebihan beban + operator untuk jumlah dari dua Box objek public static Box operator + (Box b, Box c)
      {
          Kotak kotak = new kotak ();
          box.length = b.length + c.length;
          box.breadth = b.breadth + c.breadth;
          box.height = b.height + c.height;
          kotak kembali;
      }
      
      public static Operator bool == (Box lhs, Box rhs)
      {
          Status bool = false;
          jika (lhs.length == rhs.length && lhs.height == rhs.height 
             && Lhs.breadth == rhs.breadth)
          {
              status = true;
          }
          kembali status;
      }
      public static bool operator! = (Box lhs, Box rhs)
      {
          Status bool = false;
          jika (lhs.length! = rhs.length || lhs.height! = rhs.height 
              || Lhs.breadth! = Rhs.breadth)
          {
              status = true;
          }
          kembali status;
      }
      Operator bool public static <(Box lhs, Box rhs)
      {
          Status bool = false;
          jika (lhs.length <rhs.length && lhs.height 
              <Rhs.height && lhs.breadth <rhs.breadth)
          {
              status = true;
          }
          kembali status;
      }

      Operator bool public static> (Box lhs, Box rhs)
      {
          Status bool = false;
          jika (lhs.length> rhs.length && lhs.height 
              > Rhs.height && lhs.breadth> rhs.breadth)
          {
              status = true;
          }
          kembali status;
      }

      Operator bool public static <= (Box lhs, Box rhs)
      {
          Status bool = false;
          jika (lhs.length <= rhs.length && lhs.height 
              <= Rhs.height && lhs.breadth <= rhs.breadth)
          {
              status = true;
          }
          kembali status;
      }

      Operator bool public static> = (Box lhs, Box rhs)
      {
          Status bool = false;
          jika (lhs.length> = rhs.length && lhs.height 
             > = Rhs.height && lhs.breadth> = rhs.breadth)
          {
              status = true;
          }
          kembali status;
      }
      public override string yang ToString ()
      {
          kembali String.Format ( "({0}, {1}, {2})", panjang, lebar, tinggi);
      }
   
   }
    
   kelas Tester
   {
      static void Main (string [] args)
      {
        Kotak Kotak1 = new kotak (); // mendeklarasikan Kotak1, jenis kotak
        Kotak box2 = new kotak (); // mendeklarasikan box2, jenis kotak
        Kotak box3 = new kotak (); // mendeklarasikan box3, jenis kotak
        Kotak box4 = new kotak ();
        ganda Volume = 0,0; // // Kotak1 volume yang merinci Box1.setLength (6,0);
        Box1.setBreadth (7,0);
        Box1.setHeight (5.0);

        // Box2 merinci Box2.setLength (12,0);
        Box2.setBreadth (13,0);
        Box2.setHeight (10,0);

       // Gunakan ToString kelebihan beban () menampilkan dua kotak Console.WriteLine ( "Kotak1: {0}", Box1.ToString ());
        Console.WriteLine ( "box2: {0}", Box2.ToString ());
        
        // Kotak1 volume Volume = Box1.getVolume ();
        Console.WriteLine ( "Volume Kotak1: {0}", volume);

        // Box2 volume Volume = Box2.getVolume ();
        Console.WriteLine ( "Volume box2: {0}", volume);

        // Dua benda ditambahkan box3 = Kotak1 + box2;
        Console.WriteLine ( "box3: {0}", Box3.ToString ());
        // Box3 volume Volume = Box3.getVolume ();
        Console.WriteLine ( "Volume box3: {0}", volume);

        // Membandingkan kotak
        jika (Kotak1> box2)
          Console.WriteLine ( "Kotak1 lebih besar dari box2");
        lain
          Console.WriteLine ( "Box1 tidak lebih dari box2");
        jika (Kotak1 <box2)
          Console.WriteLine ( "Kotak1 kurang dari box2");
        lain
          Console.WriteLine ( "Box1 tidak kurang dari box2");
        jika (Kotak1> = box2)
          Console.WriteLine ( "Kotak1 lebih besar dari atau sama box2");
        lain
          Console.WriteLine ( "Box1 tidak lebih besar dari atau sama box2");
        jika (Kotak1 <= box2)
          Console.WriteLine ( "Kotak1 kurang box2");
        lain
          Console.WriteLine ( "Kotak1 tidak kurang box2");
        jika (Kotak1! = box2)
          Console.WriteLine ( "Kotak1 tidak sama box2");
        lain
          Console.WriteLine ( "Kotak1 sama box2");
        Box4 = box3;
        jika (box3 == box4)
          Console.WriteLine ( "box3 sama box4");
        lain
          Console.WriteLine ( "box3 tidak sama box4");

        Console.ReadKey ();
      }
    }
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

Box1: (6, 7, 5)
Box2: (12, 13, 10)
Volume box1: 210
Volume box2: 1560
Box3: (18, 20, 15)
Volume box3: 5400
Box1 box2 tidak lebih dari
Box1 box2 kurang dari
Box1 box2 tidak lebih besar dari atau sama
Box1 box2 kurang
Box1 box2 tidak sama
Box3 sama box4