共用方式為


運算子程序 (Visual Basic)

運算子程序是一連串的 Visual Basic 陳述式,用來在已定義之類別或結構上定義標準運算子 (例如,*、<> 或 And) 的行為。 這也稱為「運算子多載」(Operator Overloading)。

定義運算子程序的時機

已定義類別或結構時,可將變數宣告成該類別或結構的型別。 有時,這類變數需要參與運算式的運算。 若要這樣做,則它必須是運算子的運算元。

Visual Basic 只可將運算子定義成它的主要資料型別。 當其中一個或兩個運算元的型別是類別或結構的型別時,即可定義運算子的行為。

如需詳細資訊,請參閱 Operator 陳述式

運算子程序的型別

運算子程序可以是下列其中一個型別:

  • 一元 (Unary) 運算子的定義,其中引數的型別就是類別或結構的型別。

  • 二元 (Binary) 運算子的定義,其中至少要有一個引數的型別是類別或結構的型別。

  • 轉換運算子的定義,其中引數的型別就是類別或結構的型別。

  • 轉換運算子的定義,傳回類別或結構的型別。

轉換運算子一律為一元,且一律使用 CType 當成所定義的運算子。

宣告語法

宣告運算子程序的語法如下:

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

' Statements of the operator procedure.

End Operator

Widening 或 Narrowing 關鍵字只可用於型別轉換運算子上。 運算子符號一律是型別轉換運算子的 CType 函式 (Visual Basic)

宣告兩個運算元以定義二元運算子,且宣告一個運算元以定義一元運算子 (包含型別轉換運算子)。 必須宣告所有運算元 ByVal。

每個運算元的宣告方式都與宣告 Sub 程序 (Visual Basic)之參數的方式相同。

資料型別

因為是在已定義的類別或結構上定義運算子,所以至少必須有一個運算元的型別是該類別或結構的型別。 若為型別轉換運算子,則運算元或傳回型別的型別必須是類別或結構的資料型別。

如需詳細資訊,請參閱 Operator 陳述式

呼叫語法

在運算式中使用運算子符號,即可隱含叫用 (Invoke) 運算子程序。 提供運算元的方式與提供預先定義之運算子的方式相同。

運算子程序的隱含呼叫語法如下:

Dim testStruct As structurename

Dim testNewStruct As structurename = testStruct operatorsymbol 10

宣告和呼叫的說明

下列結構會將帶有正負號的 128 位元整數值儲存成構成高序位 (High Order) 和低序位 (Low Order) 部分。 它會定義 + 運算子以相加兩個 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

如需詳細資訊和範例,請參閱 Visual Basic 2005 中的運算子多載 (英文)。

請參閱

工作

如何:定義運算子 (Visual Basic)

如何:定義轉換運算子 (Visual Basic)

如何:呼叫運算子程序 (Visual Basic)

如何:使用定義運算子的類別 (Visual Basic)

參考

Operator 陳述式

概念

Visual Basic 中的程序

Sub 程序 (Visual Basic)

Function 程序 (Visual Basic)

屬性程序 (Visual Basic)

程序參數和引數 (Visual Basic)