演算子プロシージャ

更新 : 2007 年 11 月

演算子プロシージャは、定義したクラスまたは構造体で、標準の演算子 (*、<>、And など) の動作を定義する一連の Visual Basic ステートメントです。これは、演算子のオーバーロードともいいます。

演算子プロシージャを定義する場合

クラスまたは構造体を定義する場合、そのクラスまたは構造体の型で変数を宣言できます。このような変数は、式の一部として演算にかかわる必要のある場合があります。このためには、この変数は演算子のオペランドである必要があります。

Visual Basic は、基本データ型でのみ演算子を定義します。演算子の動作は、オペランドのいずれか、または両方が、そのクラスまたは構造体の型である場合に定義できます。

詳細については、「Operator ステートメント」を参照してください。

演算子プロシージャの種類

演算子プロシージャは次のいずれかの種類です。

  • 引数がクラスまたは構造体の型である、単項演算子の定義。

  • 少なくとも 1 つの引数がクラスまたは構造体の型である、二項演算子の定義。

  • 引数がクラスまたは構造体の型である、変換演算子の定義。

  • クラスまたは構造体の型を返す変換演算子の定義。

変換演算子は常に単項であり、定義する演算子として常に CType を使用します。

宣言の構文

演算子プロシージャを宣言する構文は次のとおりです。

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

' Statements of the operator procedure.

End Operator

Widening または Narrowing キーワードは、型変換演算子にのみ使用します。型変換演算子の演算子記号は常に CType 関数です。

二項演算子を定義するには 2 つのオペランドを宣言し、型変換演算子を含む単項演算子を定義するには 1 つのオペランドを宣言します。すべてのオペランドは ByVal で宣言する必要があります。

各オペランドの宣言は、Sub プロシージャにパラメータを宣言する場合と同じです。

データ型

定義済みのクラスまたは構造体で演算子を定義するので、最低でも 1 つのオペランドはそのクラスまたは構造体の型である必要があります。型変換演算子では、オペランドまたは戻り値の型が、クラスまたは構造体のデータ型である必要があります。

詳細については、「Operator ステートメント」を参照してください。

呼び出し構文

式の中で演算子記号を使用することで、暗黙的に演算子プロシージャを呼び出すことができます。オペランドは、定義済みの演算子の場合と同じように指定します。

演算子プロシージャを暗黙的に呼び出す構文は次のとおりです。

Dim testStruct As structurename

Dim testNewStruct As structurename = testStruct operatorsymbol 10

宣言と呼び出しの説明

次の構造体は、符号付き 128 ビットの整数値を、上位と下位の構成部分として格納します。+ 演算子を定義し、2 つの 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」を参照してください。

参照

処理手順

方法 : 演算子を定義する

方法 : 変換演算子を定義する

方法 : 演算子プロシージャを呼び出す

方法 : 演算子を定義するクラスを使用する

概念

Visual Basic におけるプロシージャ

Sub プロシージャ

Function プロシージャ

Property プロシージャ

プロシージャのパラメータと引数

参照

Operator ステートメント