연산자 프로시저(Visual Basic)
연산자 프로시저는 정의한 클래스나 구조체에 대한 표준 연산자(예: *
, <>
또는 And
)의 동작을 정의하는 일련의 Visual Basic 문입니다. 이를 연산자 오버로드라고도 합니다.
연산자 프로시저를 정의해야 하는 경우
클래스나 구조체를 정의한 경우 변수를 해당 클래스나 구조체의 형식으로 선언할 수 있습니다. 경우에 따라 이러한 변수는 식의 일부로 작업에 참여해야 합니다. 이렇게 하려면 연산자의 피연산자여야 합니다.
Visual Basic은 기본 데이터 형식에 대해서만 연산자를 정의합니다. 피연산자 중 하나 또는 둘 다 클래스 또는 구조체 형식인 경우 연산자의 동작을 정의할 수 있습니다.
자세한 내용은 Operator 문을 참조하세요.
연산자 프로시저의 형식
연산자 프로시저는 다음 형식 중 하나일 수 있습니다.
인수가 클래스 또는 구조체 형식인 단항 연산자의 정의입니다.
인수 중 하나 이상이 클래스 또는 구조체 형식인 이항 연산자의 정의입니다.
인수가 클래스 또는 구조체 형식인 변환 연산자의 정의입니다.
클래스 또는 구조체의 형식을 반환하는 변환 연산자의 정의입니다.
변환 연산자는 항상 단항이므로 정의하는 연산자로 항상 CType
을 사용합니다.
선언 구문
연산자 프로시저를 선언하는 구문은 다음과 같습니다.
Public Shared [Widening | Narrowing] Operator operatorsymbol ( 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
참고 항목
.NET