다음을 통해 공유


Operator Statement

클래스 또는 구조체에서 연산자 프로시저를 정의하는 연산자 기호, 피연산자 및 코드를 선언합니다.

구문

[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ]
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
    [ statements ]
    [ statements ]
    Return returnvalue
    [ statements ]
End Operator

부분

attrlist
선택 사항. 특성 목록을 참조하세요.

Public
필수입니다. 이 연산자 프로시저에 공용 액세스 권한이 있음을 나타냅니다.

Overloads
선택 사항. 오버로드를 참조하세요.

Shared
필수입니다. 이 연산자 프로시저가 공유 프로시저임을 나타냅니다.

Shadows
선택 사항. Shadows를 참조하세요.

Widening
Narrowing을 지정하지 않는 한 변환 연산자에 필요합니다. 이 연산자 프로시저가 확대 변환을 정의함을 나타냅니다. 이 도움말 페이지의 "전환 확대 및 축소"를 참조하세요.

Narrowing
Widening을 지정하지 않는 한 변환 연산자에 필요합니다. 이 연산자 프로시저가 축소 변환을 정의함을 나타냅니다. 이 도움말 페이지의 "전환 확대 및 축소"를 참조하세요.

operatorsymbol
필수입니다. 이 연산자 프로시저가 정의하는 연산자의 기호 또는 식별자입니다.

operand1
필수입니다. 단항 연산자(변환 연산자 포함)의 단일 피연산자 또는 이항 연산자의 왼쪽 피연산자의 이름 및 형식입니다.

operand2
이진 연산자에 필요합니다. 이항 연산자의 오른쪽 피연산자의 이름과 형식입니다.

operand1operand2에는 다음과 같은 구문과 부분이 있습니다.

[ ByVal ] operandname [ As operandtype ]

요소 설명
ByVal 선택 사항이지만 전달 메커니즘은 ByVal이어야 합니다.
operandname 필수입니다. 이 피연산자를 나타내는 변수의 이름입니다. Declared Element Names을 참조하세요.
operandtype Option StrictOn이 아닌 한 선택 사항입니다. 이 피연산자의 데이터 형식입니다.

type
Option StrictOn이 아닌 한 선택 사항입니다. 연산자 프로시저가 반환하는 값의 데이터 형식입니다.

statements
선택 사항. 연산자 프로시저가 실행하는 문 블록입니다.

returnvalue
필수입니다. 연산자 프로시저가 호출 코드에 반환하는 값입니다.

End Operator
필수입니다. 이 연산자 프로시저의 정의를 종료합니다.

설명

클래스 또는 구조체에서만 Operator를 사용할 수 있습니다. 즉, 연산자의 선언 컨텍스트는 원본 파일, 네임스페이스, 모듈, 인터페이스, 프로시저 또는 블록이 될 수 없습니다. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준을 참조하세요.

모든 연산자는 Public Shared여야 합니다. 두 피연산자 모두에 대해 ByRef, Optional 또는 ParamArray를 지정할 수 없습니다.

연산자 기호나 식별자를 사용하여 반환 값을 보유할 수 없습니다. Return 문을 사용해야 하며 값을 지정해야 합니다. Return 문은 프로시저의 어느 위치에나 나타날 수 있습니다.

이러한 방식으로 연산자를 정의하는 것을 Overloads 키워드 사용 여부에 관계없이 연산자 오버로드라고 합니다. 다음 표에는 정의할 수 있는 연산자가 나와 있습니다.

Type 연산자
단항 +, -, IsFalse, IsTrue, Not
이진 +, -, *, /, \, &, ^, >>, <<, =, <>, >, >=, <, <=, And, Like, Mod, Or, Xor
변환(단항) CType

이진 목록의 = 연산자는 대입 연산자가 아닌 비교 연산자입니다.

CType을 정의할 때 Widening 또는 Narrowing을 지정해야 합니다.

일치하는 쌍

특정 연산자를 일치된 쌍으로 정의해야 합니다. 이러한 쌍의 연산자 중 하나를 정의하는 경우 다른 연산자도 정의해야 합니다. 일치하는 쌍은 다음과 같습니다.

  • =<>

  • ><

  • >=<=

  • IsTrueIsFalse

데이터 형식 제한

정의하는 모든 연산자는 해당 연산자를 정의하는 클래스 또는 구조체와 관련되어야 합니다. 이는 클래스 또는 구조체가 다음과 같은 데이터 형식으로 나타나야 함을 의미합니다.

  • 단항 연산자의 피연산자입니다.

  • 이항 연산자의 피연산자 중 하나 이상입니다.

  • 변환 연산자의 피연산자 또는 반환 형식입니다.

특정 연산자에는 다음과 같은 추가 데이터 형식 제한이 있습니다.

  • IsTrueIsFalse 연산자를 정의하는 경우 둘 다 Boolean 형식을 반환해야 합니다.

  • <<>> 연산자를 정의하는 경우 둘 다 operand2operandtype에 대해 Integer 형식을 지정해야 합니다.

반환 형식은 피연산자의 형식과 일치할 필요가 없습니다. 예를 들어, = 또는 <>와 같은 비교 연산자는 두 피연산자가 모두 Boolean이 아니더라도 Boolean을 반환할 수 있습니다.

논리 및 비트 연산자

And, Or, NotXor 연산자는 Visual Basic에서 논리 또는 비트 연산을 수행할 수 있습니다. 그러나 클래스나 구조체에 이러한 연산자 중 하나를 정의하는 경우 해당 비트 연산만 정의할 수 있습니다.

Operator 문을 사용하여 AndAlso 연산자를 직접 정의할 수 없습니다. 그러나 다음 조건을 충족한 경우 AndAlso를 사용할 수 있습니다.

  • AndAlso에 사용하려는 동일한 피연산자 형식에 대해 And을 정의했습니다.

  • And 정의는 이를 정의한 클래스 또는 구조체와 동일한 형식을 반환합니다.

  • And를 정의한 클래스 또는 구조체에 IsFalse 연산자를 정의했습니다.

마찬가지로, 클래스 또는 구조체의 반환 형식을 사용하여 동일한 피연산자에 Or를 정의하고 클래스 또는 구조체에 IsTrue를 정의한 경우 OrElse를 사용할 수 있습니다.

Widening and Narrowing Conversions

확대 변환은 런타임에 항상 성공하지만 축소 변환은 런타임에 실패할 수 있습니다. 자세한 내용은 Widening and Narrowing Conversions을 참조하세요.

변환 프로시저를 Widening으로 선언하는 경우 프로시저 코드가 실패를 생성해서는 안 됩니다. 이것은 다음을 의미합니다.

  • 항상 type 형식의 유효한 값을 반환해야 합니다.

  • 가능한 모든 예외 및 기타 오류 조건을 처리해야 합니다.

  • 호출하는 모든 프로시저에서 반환되는 모든 오류를 처리해야 합니다.

변환 프로시저가 성공하지 못하거나 처리되지 않은 예외가 발생할 가능성이 있는 경우 이를 Narrowing으로 선언해야 합니다.

예시

다음 코드 예에서는 Operator 문을 사용하여 And, Or, IsFalseIsTrue 연산자에 대한 연산자 프로시저를 포함하는 구조체의 개요를 정의합니다. AndOr는 각각 abc 형식과 반환 형식 abc의 두 피연산자를 사용합니다. IsFalseIsTrue는 각각 abc 형식의 단일 피연산자를 취하고 Boolean을 반환합니다. 이러한 정의를 통해 호출 코드는 abc 형식의 피연산자와 함께 And, AndAlso, OrOrElse를 사용할 수 있습니다.

Public Structure abc
    Dim d As Date
    Public Shared Operator And(ByVal x As abc, ByVal y As abc) As abc
        Dim r As New abc
        ' Insert code to calculate And of x and y.
        Return r
    End Operator
    Public Shared Operator Or(ByVal x As abc, ByVal y As abc) As abc
        Dim r As New abc
        ' Insert code to calculate Or of x and y.
        Return r
    End Operator
    Public Shared Operator IsFalse(ByVal z As abc) As Boolean
        Dim b As Boolean
        ' Insert code to calculate IsFalse of z.
        Return b
    End Operator
    Public Shared Operator IsTrue(ByVal z As abc) As Boolean
        Dim b As Boolean
        ' Insert code to calculate IsTrue of z.
        Return b
    End Operator
End Structure

참고 항목