다음을 통해 공유


연산자 오버로드

연산자 오버로드를 사용하면 "+", "-", "=", "!=" 등의 연산자를 통해 형식을 결합하고 비교할 수 있습니다. 형식에 연산자 오버로드를 추가하면 개발자는 해당 형식을 기본 제공 형식인 것처럼 사용할 수 있습니다. 연산자 오버로드는 숫자 값을 나타내는 형식의 두 인스턴스를 더하는 것을 지원하는 것처럼 연산의 의미가 해당 형식에 대해 직관적인 경우에만 수행되어야 하며 비직관적인 연산에 구문 바로 가기를 제공하기 위해 사용되어서는 안 됩니다.

다음 예제에서는 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.

참고 항목

기타 리소스

멤버 디자인 지침

클래스 라이브러리 개발을 위한 디자인 지침