Latest web development tutorials

C #의 연산자 오버로딩

당신은 다시 정의 또는 내장 된 C #을 연산자를 대체 할 수 있습니다. 따라서, 프로그래머는 사용자 정의 형식 연산자를 사용할 수 있습니다. 오버로드 운영자는 키워드연산자 연산자 기호 정의 다음에 특수 기능 이름을 가지고있다.그리고 다른 기능은 오버로드 된 연산자는 반환 형식과 매개 변수 목록이 있습니다.

예를 들어, 다음의 기능을 고려

공공 정적 박스 연산자 + (박스 B, 박스 C)
{
   상자 상자 = 새로운 상자 ();
   box.length = b.length를 + c.length;
   box.breadth = b.breadth + c.breadth;
   box.height = b.height + c.height;
   상자를 반환;
}

상기 함수는 사용자 정의 된 클래스 상자 가산 연산자 (+)를 구현한다. 그것은 두 개의 상자 객체의 속성을 추가, 그리고는 반환 상자 개체를 추가했다.

운영자는 달성 과부하

다음 프로그램은 완전한 구현을 보여줍니다

시스템을 이용하여;

네임 스페이스 OperatorOvlApplication
{
   클래스 상자
   {
      개인 더블 길이; // 길이 개인 더블 폭; // 폭 개인 이중 높이; // 높이 공공 더블 경우 getVolume ()
      {
         반환 길이 * 폭 * 높이;
      }
      공공 무효 SetLength를 (더블 렌)
      {
         길이 = 렌;
      }

      공공 무효 setBreadth (더블 BRE)
      {
         폭은 BRE를 =;
      }

      공공 무효 setHeight (더블 평)
      {
         높이 = 평;
      }
      두 상자의 합 // + 연산자 과부하 공용 static 박스 연산자 + (B 박스, 박스 C) 개체
      {
         상자 상자 = 새로운 상자 ();
         box.length = b.length를 + c.length;
         box.breadth = b.breadth + c.breadth;
         box.height = b.height + c.height;
         상자를 반환;
      }

   }

   클래스 테스터
   {
      정적 무효 메인 (문자열 []에 인수)
      {
         상자 BOX1 = 새로운 상자 (); //이 BOX1를 선언, 입력 상자
         상자 BOX2 = 새로운 상자 (); //이 BOX2를 선언, 입력 상자
         상자 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 # 1 연산자 오버로딩의 능력을 설명한다 :

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

위의 논의를 들어, 위의 예제를 확장하자, 더 오버로드 된 연산자 :

시스템을 이용하여;

네임 스페이스 OperatorOvlApplication
{
    클래스 상자
    {
       개인 더블 길이; // 길이 개인 더블 폭; // 폭 개인 이중 높이; // 높이 공공 더블 경우 getVolume ()
       {
         반환 길이 * 폭 * 높이;
       }
      공공 무효 SetLength를 (더블 렌)
      {
          길이 = 렌;
      }

      공공 무효 setBreadth (더블 BRE)
      {
          폭은 BRE를 =;
      }

      공공 무효 setHeight (더블 평)
      {
          높이 = 평;
      }
      두 상자의 합 // + 연산자 과부하 공용 static 박스 연산자 + (B 박스, 박스 C) 개체
      {
          상자 상자 = 새로운 상자 ();
          box.length = b.length를 + c.length;
          box.breadth = b.breadth + c.breadth;
          box.height = b.height + c.height;
          상자를 반환;
      }
      
      공공 정적 부울 연산자 == (박스 좌, 박스 우)
      {
          부울 상태 = 거짓;
          경우 (lhs.length == rhs.length && lhs.height == rhs.height 
             && Lhs.breadth == rhs.breadth)
          {
              상태 = TRUE;
          }
          상태를 반환;
      }
      공공 정적 부울 연산자! = (박스 좌, 박스 우)
      {
          부울 상태 = 거짓;
          (lhs.length! = rhs.length || lhs.height! = rhs.height 경우 
              || Lhs.breadth! = Rhs.breadth)
          {
              상태 = TRUE;
          }
          상태를 반환;
      }
      공공 정적 부울 연산자 <(박스 좌, 박스 우)
      {
          부울 상태 = 거짓;
          (lhs.length <rhs.length && lhs.height 경우 
              <Rhs.height && lhs.breadth <rhs.breadth)
          {
              상태 = TRUE;
          }
          상태를 반환;
      }

      공공 정적 부울 연산자> (박스 좌, 박스 우)
      {
          부울 상태 = 거짓;
          경우 (lhs.length> rhs.length && lhs.height 
              > Rhs.height && lhs.breadth> rhs.breadth)
          {
              상태 = TRUE;
          }
          상태를 반환;
      }

      공공 정적 부울 연산자 <= (박스 좌, 박스 우)
      {
          부울 상태 = 거짓;
          경우 (lhs.length <= rhs.length && lhs.height 
              <= Rhs.height && lhs.breadth <= rhs.breadth)
          {
              상태 = TRUE;
          }
          상태를 반환;
      }

      공공 정적 부울 연산자> = (박스 좌, 박스 우)
      {
          부울 상태 = 거짓;
          경우 (lhs.length> = rhs.length && lhs.height 
             > = Rhs.height && lhs.breadth> = rhs.breadth)
          {
              상태 = TRUE;
          }
          상태를 반환;
      }
      공공 재정의 문자열 ToString ()
      {
          및 String.format ( "({0}, {1}, {2})", 길이, 폭, 높이)를 반환;
      }
   
   }
    
   클래스 테스터
   {
      정적 무효 메인 (문자열 []에 인수)
      {
        상자 BOX1 = 새로운 상자 (); //이 BOX1를 선언, 입력 상자
        상자 BOX2 = 새로운 상자 (); //이 BOX2를 선언, 입력 상자
        상자 Box3 = 새로운 상자 (); //이 Box3를 선언, 입력 상자
        상자 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);

       // 두 개의 상자 Console.WriteLine 표시 () 오버로드를 ToString 사용 ( "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 (이하 "BOX2보다 더 BOX1");
        경우 (BOX1 <BOX2)
          Console.WriteLine ( "BOX1 BOX2 이하");
        그렇지 않으면
          Console.WriteLine (이하 "BOX2 이상 BOX1");
        경우 (BOX1> = BOX2)
          Console.WriteLine ( "BOX1 이상인 BOX2");
        그렇지 않으면
          Console.WriteLine (이하 "하지 이상인 BOX2 BOX1");
        경우 (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