運算子程序 (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
您只能在類型轉換運算子上使用 Widening
或 Narrowing
關鍵字。 運算子符號一律為類型轉換運算子的 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