演算子プロシージャ (Visual Basic)Operator Procedures (Visual Basic)

演算子プロシージャは、定義したクラスまたは構造体の標準演算子 (*<>Andなど) の動作を定義する一連の Visual Basic ステートメントです。An operator procedure is a series of Visual Basic statements that define the behavior of a standard operator (such as *, <>, or And) on a class or structure you have defined. これは、演算子のオーバーロードとも呼ばれます。This is also called operator overloading.

演算子プロシージャを定義する場合When to Define Operator Procedures

クラスまたは構造体を定義したら、そのクラスまたは構造体の型として変数を宣言できます。When you have defined a class or structure, you can declare variables to be of the type of that class or structure. このような変数は、式の一部として操作に参加する必要がある場合があります。Sometimes such a variable needs to participate in an operation as part of an expression. これを行うには、演算子のオペランドである必要があります。To do this, it must be an operand of an operator.

Visual Basic は、基本データ型に対してのみ演算子を定義します。Visual Basic defines operators only on its fundamental data types. 1つまたは両方のオペランドがクラスまたは構造体の型である場合は、演算子の動作を定義できます。You can define the behavior of an operator when one or both of the operands are of the type of your class or structure.

詳細については、「 Operator Statement」を参照してください。For more information, see Operator Statement.

演算子プロシージャの種類Types of Operator Procedure

演算子プロシージャには、次のいずれかの型を指定できます。An operator procedure can be one of the following types:

  • 引数がクラスまたは構造体の型である単項演算子の定義。A definition of a unary operator where the argument is of the type of your class or structure.

  • 少なくとも1つの引数がクラスまたは構造体の型である二項演算子の定義。A definition of a binary operator where at least one of the arguments is of the type of your class or structure.

  • 引数がクラスまたは構造体の型である変換演算子の定義。A definition of a conversion operator where the argument is of the type of your class or structure.

  • クラスまたは構造体の型を返す変換演算子の定義。A definition of a conversion operator that returns the type of your class or structure.

変換演算子は常に単項演算であり、定義する演算子として常に CType を使用します。Conversion operators are always unary, and you always use CType as the operator you are defining.

宣言の構文Declaration Syntax

演算子プロシージャを宣言する構文は次のとおりです。The syntax for declaring an operator procedure is as follows:

Public Shared [Widening | Narrowing] Operator operatorsymbol ( operand1 [,  operand2 ]) As datatype

' Statements of the operator procedure.

End Operator

Widening または Narrowing キーワードは、型変換演算子でのみ使用します。You use the Widening or Narrowing keyword only on a type conversion operator. 演算子シンボルは、型変換演算子の場合は常にCType 関数です。The operator symbol is always CType Function for a type conversion operator.

2つのオペランドを宣言して二項演算子を定義し、1つのオペランドを宣言して、単項演算子 (型変換演算子を含む) を定義します。You declare two operands to define a binary operator, and you declare one operand to define a unary operator, including a type conversion operator. すべてのオペランドは ByValとして宣言する必要があります。All operands must be declared ByVal.

各オペランドは、サブプロシージャのパラメーターを宣言するのと同じ方法で宣言します。You declare each operand the same way you declare parameters for Sub Procedures.

データ型Data Type

定義したクラスまたは構造体に演算子を定義しているため、少なくとも1つのオペランドがそのクラスまたは構造体のデータ型である必要があります。Because you are defining an operator on a class or structure you have defined, at least one of the operands must be of the data type of that class or structure. 型変換演算子の場合、オペランドまたは戻り値の型は、クラスまたは構造体のデータ型である必要があります。For a type conversion operator, either the operand or the return type must be of the data type of the class or structure.

詳細については、「 Operator Statement」を参照してください。For more details, see Operator Statement.

呼び出し構文Calling Syntax

演算子プロシージャを暗黙的に呼び出すには、式の中で演算子記号を使用します。You invoke an operator procedure implicitly by using the operator symbol in an expression. オペランドは、定義済みの演算子に対して実行するのと同じ方法で指定します。You supply the operands the same way you do for predefined operators.

演算子プロシージャへの暗黙的な呼び出しの構文は次のとおりです。The syntax for an implicit call to an operator procedure is as follows:

Dim testStruct AsstructurenameDim testStruct As structurename

Dim testNewStruct Asstructurename= testStruct演算子シンボル10Dim testNewStruct As structurename = testStruct operatorsymbol 10

宣言と呼び出しの図Illustration of Declaration and Call

次の構造体は、上位および下位の要素として符号付き128ビット整数値を格納します。The following structure stores a signed 128-bit integer value as the constituent high-order and low-order parts. 2つの veryLong 値を加算し、結果として得られる veryLong 値を生成する + 演算子を定義します。It defines the + operator to add two veryLong values and generate a resulting veryLong value.

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で定義されている + 演算子の一般的な呼び出しを示しています。The following example shows a typical call to the + operator defined on veryLong.

Dim v1, v2, v3 As veryLong
v1.highOrder = 1
v1.lowOrder = Long.MaxValue
v2.highOrder = 0
v2.lowOrder = 4
v3 = v1 + v2

参照See also