分享方式:


運算子程序 (Visual Basic)

運算子程序是一系列的 Visual Basic 陳述式,在您定義的類別或結構上,定義標準運算子的行為 (例如 *<>And)。 這也稱為「運算子多載」

定義運算子程序的時機

當您定義類別或結構時,可以將變數宣告為該類別或結構的類型。 有時候,此類變數需要參與作業做為運算式的一部分。 若要這樣做,它必須是運算子的運算元。

Visual Basic 只會在其基本資料類型上定義運算子。 當其中一個或兩個運算元屬於類別或結構的類型時,您可以定義運算子的行為。

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

運算子程序的型別

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

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

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

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

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

轉換運算子一律是一元的,而且您一律會使用 CType 做為您定義的運算子。

宣告語法

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

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

' Statements of the operator procedure.

End Operator

您只能在類型轉換運算子上使用 WideningNarrowing 關鍵字。 運算子符號一律為類型轉換運算子的 CType 函式

您會宣告兩個運算元來定義二元運算子,並宣告一個運算元來定義一元運算子,包括類型轉換運算子。 所有運算元都必須宣告 ByVal

您宣告每個運算元的方式,與宣告子程序參數的方式相同。

資料類型

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

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

呼叫語法

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

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

Dim testStruct As structurename

Dim testNewStruct As structurename = testStruct operatorsymbol 10

宣告和呼叫的圖例

下列結構會將帶正負號的 128 位元整數值儲存為構成高位和低位部分。 這會定義 + 運算子來新增兩個 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

另請參閱