최고의 C #의 연산자 오버로딩 튜토리얼 2024년, 이 튜토리얼에서는 운영자는 달성 과부하,재충전 및 비 오버로드 된 연산자,예,를 배울 수 있습니다.
당신은 다시 정의 또는 내장 된 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