연산자 프로시저
업데이트: 2007년 11월
연산자 프로시저는 정의된 클래스나 구조체에서 표준 연산자(예: *, <> 또는 And)의 동작을 정의하는 일련의 Visual Basic 문입니다. 이를 연산자 오버로드라고도 부릅니다.
연산자 프로시저를 정의하는 경우
클래스나 구조체를 정의한 경우 해당 클래스나 구조체의 형식이 되도록 변수를 선언할 수 있습니다. 경우에 따라 이러한 변수는 식의 일부로서 연산에 사용되어야 합니다. 이렇게 하려면 변수가 연산자의 피연산자여야 합니다.
Visual Basic은 자체의 기본 데이터 형식에서만 연산자를 정의합니다. 피연산자 중 하나 또는 둘 다 클래스나 구조체의 형식일 경우 연산자의 동작을 정의할 수 있습니다.
자세한 내용은 Operator 문을 참조하십시오.
연산자 프로시저의 형식
연산자 프로시저는 다음 형식 중 하나일 수 있습니다.
인수가 클래스나 구조체의 형식인 단항 연산자의 정의
적어도 하나 이상의 인수가 클래스나 구조체의 형식인 이항 연산자의 정의
인수가 클래스나 구조체의 형식인 변환 연산자의 정의
클래스나 구조체의 형식을 반환하는 변환 연산자의 정의
변환 연산자는 항상 단항이며 정의하려는 연산자로서 항상 CType이 사용됩니다.
선언 구문
연산자 프로시저를 선언하는 구문은 다음과 같습니다.
Public Shared [Widening | Narrowing] Operatoroperatorsymbol (operand1 [, operand2]) As datatype
' Statements of the operator procedure.
End Operator
Widening 또는 Narrowing 키워드는 형식 변환 연산자에서만 사용합니다. 형식 변환 연산자의 경우 연산자 기호는 항상 CType 함수입니다.
이항 연산자를 정의하기 위해 두 개의 피연산자를 선언하고 형식 변환 연산자를 비롯한 단항 연산자를 정의하기 위해 하나의 피연산자를 선언합니다. 모든 피연산자는 ByVal로 선언되어야 합니다.
Sub 프로시저에 대해 매개 변수를 선언할 때와 같은 방법으로 각 피연산자를 선언합니다.
데이터 형식
정의된 클래스나 구조체에서 연산자를 정의하므로 적어도 피연산자 중 하나가 해당 클래스나 구조체의 데이터 형식이어야 합니다. 형식 변환 연산자의 경우 피연산자 또는 반환 형식이 클래스나 구조체의 데이터 형식이어야 합니다.
자세한 내용은 Operator 문을 참조하십시오.
호출 구문
식에서 연산자 기호를 사용하여 연산자 프로시저를 암시적으로 호출합니다. 미리 정의된 연산자의 경우와 같은 방법으로 피연산자를 제공합니다.
연산자 프로시저를 암시적으로 호출하는 구문은 다음과 같습니다.
Dim testStruct As structurename
Dim testNewStruct As structurename = testStruct operatorsymbol 10
선언과 호출에 대한 설명
다음 구조체는 부호 있는 128비트 정수 값을 상위 및 하위 구성 부분으로 저장합니다. + 연산자를 정의하여 두 개의 veryLong 값을 추가하고 결과 veryLong 값을 생성합니다.
Public Structure veryLong
Dim highOrder As Long
Dim lowOrder As Long
Public Shared Operator +(ByVal v As veryLong, _
ByVal w As veryLong) As veryLong
Dim sum As New veryLong
sum = v
Try
sum.lowOrder += w.lowOrder
Catch ex As System.OverflowException
sum.lowOrder -= (Long.MaxValue - w.lowOrder + 1)
sum.highOrder += 1
End Try
sum.highOrder += w.highOrder
Return sum
End Operator
End Structure
다음 예제에서는 veryLong에 정의된 일반적인 + 연산자 호출을 보여 줍니다.
Dim v1, v2, v3 As veryLong
v1.highOrder = 1
v1.lowOrder = Long.MaxValue
v2.highOrder = 0
v2.lowOrder = 4
v3 = v1 + v2
자세한 내용과 예제는 Operator Overloading in Visual Basic 2005를 참조하십시오.