연산자 오버로드
연산자 오버로드를 사용하면 "+", "-", "=", "!=" 등의 연산자를 통해 형식을 결합하고 비교할 수 있습니다. 형식에 연산자 오버로드를 추가하면 개발자는 해당 형식을 기본 제공 형식인 것처럼 사용할 수 있습니다. 연산자 오버로드는 숫자 값을 나타내는 형식의 두 인스턴스를 더하는 것을 지원하는 것처럼 연산의 의미가 해당 형식에 대해 직관적인 경우에만 수행되어야 하며 비직관적인 연산에 구문 바로 가기를 제공하기 위해 사용되어서는 안 됩니다.
다음 예제에서는 DateTime 클래스의 더하기 연산에 대한 시그니처를 보여 줍니다.
[Visual Basic]
Public Shared Function op_Addition(ByVal d As DateTime, _
ByVal t As TimeSpan _
) As DateTime
/c
public static DateTime op_Addition(
DateTime d,
TimeSpan t
);
기본(기본 제공) 형식처럼 동작하는 형식의 경우를 제외하고 연산자 오버로드를 정의하지 않습니다.
기본 형식처럼 동작하는 형식에서 연산자 오버로드를 정의할 수 있습니다.
예를 들어, String은 == 및 != 연산자를 정의합니다.
System.Decimal과 같이 수를 나타내는 구조체의 연산자 오버로드를 정의합니다.
연산자 오버로드의 정의를 신중히 수행합니다. 연산자 오버로드는 연산 결과를 즉시 알 수 있는 경우에 유용합니다. 예를 들어, 하나의 System.DateTime 개체를 다른 System.DateTime 개체에서 뺀 다음 System.TimeSpan 개체를 가져올 수 있습니다. 그러나 논리합 연산자를 사용하여 두 데이터베이스 쿼리를 통합하거나 시프트 연산자를 사용하여 스트림에 쓰는 것은 적절하지 않습니다.
하나 이상의 피연산자가 오버로드를 정의하는 형식이 아닐 경우 연산자 오버로드를 제공하지 않습니다.
C# 컴파일러는 이 지침을 적용합니다.
연산자는 대칭적 방식으로 오버로드합니다.
예를 들어, 같음 연산자를 오버로드하는 경우에는 같지 않음 연산자도 오버로드해야 합니다. 마찬가지로 보다 작음 연산자를 오버로드하는 경우에는 보다 큼 연산자도 오버로드해야 합니다.
메서드에 각 오버로드된 연산자에 해당하는 이름을 제공할 수 있습니다.
CLS 규격이 되려면 이 지침을 따라야 합니다. 다음 표에서는 연산자 기호 목록과 대응하는 대체 메서드 및 연산자 이름 목록을 보여 줍니다.
C# 연산자 기호 |
대체 메서드 이름 |
연산자 이름 |
---|---|---|
정의되지 않음 |
ToXxx 또는 FromXxx |
op_Implicit |
정의되지 않음 |
ToXxx 또는 FromXxx |
op_Explicit |
+(이진) |
Add |
op_Addition |
-(이진) |
Subtract |
op_Subtraction |
*(이진) |
Multiply |
op_Multiply |
/ |
Divide |
op_Division |
% |
Mod |
op_Modulus |
^ |
Xor |
op_ExclusiveOr |
&(이진) |
BitwiseAnd |
op_BitwiseAnd |
| |
BitwiseOr |
op_BitwiseOr |
&& |
And |
op_LogicalAnd |
|| |
Or |
op_LogicalOr |
= |
Assign |
op_Assign |
<< |
LeftShift |
op_LeftShift |
>> |
RightShift |
op_RightShift |
정의되지 않음 |
LeftShift |
op_SignedRightShift |
정의되지 않음 |
RightShift |
op_UnsignedRightShift |
== |
Equals |
op_Equality |
> |
CompareTo |
op_GreaterThan |
< |
CompareTo |
op_LessThan |
!= |
Equals |
op_Inequality |
>= |
CompareTo |
op_GreaterThanOrEqual |
<= |
CompareTo |
op_LessThanOrEqual |
*= |
Multiply |
op_MultiplicationAssignment |
-= |
Subtract |
op_SubtractionAssignment |
^= |
Xor |
op_ExclusiveOrAssignment |
<<= |
LeftShift |
op_LeftShiftAssignment |
%= |
Mod |
op_ModulusAssignment |
+= |
Add |
op_AdditionAssignment |
&= |
BitwiseAnd |
op_BitwiseAndAssignment |
|= |
BitwiseOr |
op_BitwiseOrAssignment |
, |
쉼표 |
op_Comma |
/= |
Divide |
op_DivisionAssignment |
-- |
Decrement |
op_Decrement |
++ |
Increment |
op_Increment |
-(단항) |
Negate |
op_UnaryNegation |
+(단항) |
Plus |
op_UnaryPlus |
~ |
OnesComplement |
op_OnesComplement |
Portions Copyright 2005 Microsoft Corporation. All rights reserved.
Portions Copyright Addison-Wesley Corporation. All rights reserved.
디자인 지침에 자세한 내용은 참조를 "Framework 디자인 지침: 규칙, 숙어, 및 재사용에 대 한 패턴입니다.NET 라이브러리"도 서 Krzysztof Cwalina와 Brad Abrams, 게시 Addison-wesley, 2005.