Operator StatementOperator Statement

클래스 또는 구조체에서 연산자 프로시저를 정의 하는 연산자 기호, 피연산자 및 코드를 선언 합니다.Declares the operator symbol, operands, and code that define an operator procedure on a class or structure.

구문Syntax

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

부분Parts

attrlist
선택 사항입니다.Optional. 특성 목록을 참조 하십시오.See Attribute List.

Public
필수 요소.Required. 이 연산자 프로시저에 공용 액세스 권한이 있음을 나타냅니다.Indicates that this operator procedure has Public access.

Overloads
선택 사항입니다.Optional. 오버 로드를 참조 하세요.See Overloads.

Shared
필수 요소.Required. 이 연산자 프로시저가 공유 프로시저 임을 나타냅니다.Indicates that this operator procedure is a Shared procedure.

Shadows
선택 사항입니다.Optional. 그림자를 참조 하세요.See Shadows.

Widening
을 지정 하지 않는 한 변환 연산자에 필요 Narrowing 합니다.Required for a conversion operator unless you specify Narrowing. 이 연산자 프로시저가 확대 변환을 정의 함을 나타냅니다.Indicates that this operator procedure defines a Widening conversion. 이 도움말 페이지의 "확대 및 축소 변환"을 참조 하십시오.See "Widening and Narrowing Conversions" on this Help page.

Narrowing
을 지정 하지 않는 한 변환 연산자에 필요 Widening 합니다.Required for a conversion operator unless you specify Widening. 이 연산자 프로시저가 축소 변환을 정의 함을 나타냅니다.Indicates that this operator procedure defines a Narrowing conversion. 이 도움말 페이지의 "확대 및 축소 변환"을 참조 하십시오.See "Widening and Narrowing Conversions" on this Help page.

operatorsymbol
필수 요소.Required. 이 연산자 프로시저가 정의 하는 연산자의 기호 또는 식별자입니다.The symbol or identifier of the operator that this operator procedure defines.

operand1
필수 요소.Required. 단항 연산자의 단일 피연산자 이름 및 형식 (변환 연산자 포함) 또는 이항 연산자의 왼쪽 피연산자입니다.The name and type of the single operand of a unary operator (including a conversion operator) or the left operand of a binary operator.

operand2
이항 연산자에 필요 합니다.Required for binary operators. 이항 연산자 오른쪽 피연산자의 이름과 형식입니다.The name and type of the right operand of a binary operator.

operand1및에 operand2 는 다음과 같은 구문과 부분이 있습니다.operand1 and operand2 have the following syntax and parts:

[ ByVal ] operandname [ As operandtype ]

부분Part DescriptionDescription
ByVal 선택 사항 이지만 전달 메커니즘이 ByVal이어야 합니다.Optional, but the passing mechanism must be ByVal.
operandname 필수 요소.Required. 이 피연산자를 나타내는 변수의 이름입니다.Name of the variable representing this operand. Declared Element Names을 참조하세요.See Declared Element Names.
operandtype 가이 아닌 경우 선택 사항입니다 Option Strict On .Optional unless Option Strict is On. 이 피연산자의 데이터 형식입니다.Data type of this operand.

type
가이 아닌 경우 선택 사항입니다 Option Strict On .Optional unless Option Strict is On. 연산자 프로시저에서 반환 하는 값의 데이터 형식입니다.Data type of the value the operator procedure returns.

statements
선택 사항입니다.Optional. 연산자 프로시저에서 실행 하는 문 블록입니다.Block of statements that the operator procedure runs.

returnvalue
필수 요소.Required. 연산자 프로시저가 호출 코드에 반환 하는 값입니다.The value that the operator procedure returns to the calling code.

End OperatorEnd Operator
필수 요소.Required. 이 연산자 프로시저의 정의를 종료 합니다.Terminates the definition of this operator procedure.

설명Remarks

Operator는 클래스 또는 구조체 에서만 사용할 수 있습니다.You can use Operator only in a class or structure. 즉, 연산자의 선언 컨텍스트 는 소스 파일, 네임 스페이스, 모듈, 인터페이스, 프로시저 또는 블록이 될 수 없습니다.This means the declaration context for an operator cannot be a source file, namespace, module, interface, procedure, or block. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준을 참조하세요.For more information, see Declaration Contexts and Default Access Levels.

모든 연산자는 여야 합니다 Public Shared .All operators must be Public Shared. ByRef Optional ParamArray 두 피연산자에 대해, 또는를 지정할 수 없습니다.You cannot specify ByRef, Optional, or ParamArray for either operand.

연산자 기호 또는 식별자를 사용 하 여 반환 값을 저장할 수 없습니다.You cannot use the operator symbol or identifier to hold a return value. 문을 사용 해야 하 Return 고 값을 지정 해야 합니다.You must use the Return statement, and it must specify a value. Return프로시저의 아무 곳에 나 원하는 수의 문이 표시 될 수 있습니다.Any number of Return statements can appear anywhere in the procedure.

이러한 방식으로 연산자를 정의 하는 것은 키워드를 사용 하는지 여부에 관계 없이 연산자 오버 로드라고 Overloads 합니다.Defining an operator in this way is called operator overloading, whether or not you use the Overloads keyword. 다음 표에는 정의할 수 있는 연산자가 나와 있습니다.The following table lists the operators you can define.

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

=이진 목록의 연산자는 대입 연산자가 아닌 비교 연산자입니다.Note that the = operator in the binary list is the comparison operator, not the assignment operator.

를 정의 하 CType 는 경우 또는를 지정 해야 합니다 Widening Narrowing .When you define CType, you must specify either Widening or Narrowing.

짝이 되는 쌍Matched Pairs

특정 연산자를 일치 하는 쌍으로 정의 해야 합니다.You must define certain operators as matched pairs. 이러한 쌍의 연산자 중 하나를 정의 하는 경우 다른 연산자도 정의 해야 합니다.If you define either operator of such a pair, you must define the other as well. 일치 하는 쌍은 다음과 같습니다.The matched pairs are the following:

  • =<>= and <>

  • ><> and <

  • >=<=>= and <=

  • IsTrueIsFalseIsTrue and IsFalse

데이터 형식 제한 사항Data Type Restrictions

정의 하는 모든 연산자는 정의 하는 클래스 또는 구조체를 포함 해야 합니다.Every operator you define must involve the class or structure on which you define it. 즉, 클래스 또는 구조체는 다음의 데이터 형식으로 나타나야 합니다.This means that the class or structure must appear as the data type of the following:

  • 단항 연산자의 피연산자입니다.The operand of a unary operator.

  • 이항 연산자의 피연산자 중 하나 이상입니다.At least one of the operands of a binary operator.

  • 변환 연산자의 피연산자 또는 반환 형식입니다.Either the operand or the return type of a conversion operator.

특정 연산자에는 다음과 같은 추가 데이터 형식 제한이 있습니다.Certain operators have additional data type restrictions, as follows:

  • 및 연산자를 정의 하는 경우 IsTrue IsFalse 둘 다 형식을 반환 해야 합니다 Boolean .If you define the IsTrue and IsFalse operators, they must both return the Boolean type.

  • 및 연산자를 정의 하는 경우 << >> 둘 다 Integer 의에 대 한 형식을 지정 해야 합니다 operandtype operand2 .If you define the << and >> operators, they must both specify the Integer type for the operandtype of operand2.

반환 형식은 두 피연산자의 형식에 해당 하지 않아도 됩니다.The return type does not have to correspond to the type of either operand. 예를 들어 또는와 같은 비교 연산자 =<> 가이 아닌 경우에도를 반환할 수 있습니다 Boolean Boolean .For example, a comparison operator such as = or <> can return Boolean even if neither operand is Boolean.

논리 및 비트 연산자Logical and Bitwise Operators

And,, Or Not 및 연산자는 Xor Visual Basic에서 논리적 or 비트 연산을 수행할 수 있습니다.The And, Or, Not, and Xor operators can perform either logical or bitwise operations in Visual Basic. 그러나 클래스 또는 구조체에서 이러한 연산자 중 하나를 정의 하는 경우에는 비트 연산을 정의할 수 있습니다.However, if you define one of these operators on a class or structure, you can define only its bitwise operation.

문을 사용 하 여 직접 연산자를 정의할 수 없습니다 AndAlso Operator .You cannot define the AndAlso operator directly with an Operator statement. 그러나 AndAlso 다음 조건을 충족 하는 경우에는를 사용할 수 있습니다.However, you can use AndAlso if you have fulfilled the following conditions:

  • And에 사용 하려는 것과 동일한 피연산자 유형에 대해를 정의 했습니다 AndAlso .You have defined And on the same operand types you want to use for AndAlso.

  • 정의는 And 정의 된 클래스 또는 구조체와 동일한 형식을 반환 합니다.Your definition of And returns the same type as the class or structure on which you have defined it.

  • IsFalse사용자가 정의한 클래스 또는 구조체에서 연산자를 정의 했습니다 And .You have defined the IsFalse operator on the class or structure on which you have defined And.

마찬가지로, OrElse Or 클래스 또는 구조체의 반환 형식을 사용 하 여 동일한 피연산자에을 정의 하 고 IsTrue 클래스 또는 구조체에를 정의한 경우를 사용할 수 있습니다.Similarly, you can use OrElse if you have defined Or on the same operands, with the return type of the class or structure, and you have defined IsTrue on the class or structure.

Widening and Narrowing ConversionsWidening and Narrowing Conversions

확대 변환은 런타임에 항상 성공 하지만 축소 변환은 런타임에 실패할 수 있습니다.A widening conversion always succeeds at run time, while a narrowing conversion can fail at run time. 자세한 내용은 Widening and Narrowing Conversions을 참조하세요.For more information, see Widening and Narrowing Conversions.

변환 프로시저를로 선언 하는 경우 Widening 프로시저 코드에서 오류를 생성 해서는 안 됩니다.If you declare a conversion procedure to be Widening, your procedure code must not generate any failures. 이는 다음을 의미합니다.This means the following:

  • 항상 형식의 유효한 값을 반환 해야 합니다 type .It must always return a valid value of type type.

  • 가능한 모든 예외 및 기타 오류 조건을 처리 해야 합니다.It must handle all possible exceptions and other error conditions.

  • 호출 하는 프로시저에서 반환 되는 모든 오류를 처리 해야 합니다.It must handle any error returns from any procedures it calls.

변환 프로시저가 성공 하지 못할 수 있거나 처리 되지 않은 예외가 발생할 수 있는 경우로 선언 해야 합니다 Narrowing .If there is any possibility that a conversion procedure might not succeed, or that it might cause an unhandled exception, you must declare it to be Narrowing.

예제Example

다음 코드 예제에서는 문을 사용 하 여 Operator And ,, Or IsFalseIsTrue 연산자에 대 한 연산자 프로시저를 포함 하는 구조체의 개요를 정의 합니다.The following code example uses the Operator statement to define the outline of a structure that includes operator procedures for the And, Or, IsFalse, and IsTrue operators. AndOr 는 각각 형식과 반환 형식의 두 피연산자를 사용 abc abc 합니다.And and Or each take two operands of type abc and return type abc. IsFalseIsTrue 는 각각 형식의 단일 피연산자를 사용 abc 하 고를 반환 Boolean 합니다.IsFalse and IsTrue each take a single operand of type abc and return Boolean. 이러한 정의를 통해 호출 코드는 And ,, AndAlso 및를 Or OrElse 형식의 피연산자와 함께 사용할 수 abc 있습니다.These definitions allow the calling code to use And, AndAlso, Or, and OrElse with operands of type abc.

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

참고 항목See also