Operator 陳述式

宣告會在類別或結構上定義運算子程序的運算子符號、運算元和程式碼。

[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ] 
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
    [ statements ]
    [ statements ]
    Return returnvalue
    [ statements ]
End Operator

組件

  • attrlist
    選擇項。 請參閱屬性清單

  • Public
    必要項。 表示這個運算子程序具有 Public (Visual Basic) 存取權。

  • Overloads
    選擇項。 請參閱 Overloads (Visual Basic)

  • Shared
    必要項。 表示這個運算子程序是 Shared (Visual Basic) 程序。

  • Shadows
    選擇項。 請參閱 Shadows (Visual Basic)

  • Widening
    除非您指定 Narrowing,否則這會是轉換運算子的必要項。 表示這個運算子程序會定義 Widening (Visual Basic) 轉換。 請參閱本說明網頁上「擴大和縮小轉換」的內容。

  • Narrowing
    除非您指定 Widening,否則這會是轉換運算子的必要項。 表示這個運算子程序會定義 Narrowing (Visual Basic) 轉換。 請參閱本說明網頁上「擴大和縮小轉換」的內容。

  • operatorsymbol
    必要項。 這個運算子程序所定義之運算子的符號或識別項。

  • operand1
    必要項。 一元 (Unary) 運算子 (包括轉換運算子) 之單一運算元的名稱和型別,或是二元 (Binary) 運算子之左運算元的名稱和型別。

  • operand2
    二元運算子的必要項。 二元運算子之右運算元的名稱和型別。

    operand1 和 operand2 具有下列語法和參數:

    [ ByVal ] operandname [ As operandtype ]

    組件

    描述

    ByVal

    選擇項,但是傳遞機制必須是 ByVal (Visual Basic)

    operandname

    必要項。 代表這個運算元的變數名稱。 請參閱宣告項目名稱 (Visual Basic)

    operandtype

    除非 Option Strict 為 On,否則為選擇項。 這個運算元的資料型別。

  • type
    除非 Option Strict 為 On,否則為選擇項。 運算子程序所傳回之值的資料型別。

  • statements
    選擇項。 運算子程序所執行的陳述式區塊。

  • returnvalue
    必要項。 運算子程序傳回給呼叫程式碼的值。

  • EndOperator
    必要項。 結束這個運算子程序的定義。

備註

您只能在類別或結構中使用 Operator。 這表示運算子的「宣告內容」(Declaration Context) 不能是原始程式檔 (Source File)、命名空間 (Namespace)、模組、介面、程序和區塊。 如需詳細資訊,請參閱宣告內容和預設存取層級 (Visual Basic)

所有運算子都必須為 Public Shared。 您不能指定 ByRef、Optional 或 ParamArray 給任一個運算元。

您無法使用運算子符號或識別項,保留傳回值; 您必須使用 Return 陳述式,且它必須指定一個值。 Return 陳述式的數目不受限制並可以出現在程序中的任何位置。

不論是否使用 Overloads 關鍵字,以這種方式定義運算子都稱為「運算子多載」。 下表列出您可以定義的運算子。

型別

運算子

一元

+, -, IsFalse, IsTrue, Not

Binary

+, -, *, /, \, &, ^, >>, <<, =, <>, >, >=, <, <=, And, Like, Mod, Or, Xor

轉換 (一元)

CType

請注意,二元清單中的 = 運算子是比較運算子,而不是指派運算子。

在定義 CType 時,您必須指定 Widening 或 Narrowing。

相符的配對

您必須將某些運算子定義為相符的配對。 如果要定義此類配對的任一個運算子,也必須定義另一個運算子。 相符的配對如下:

  • = 和 <>

  • > 和 <

  • >= 和 <=

  • IsTrue 和 IsFalse

資料型別限制

您所定義的每一個運算子都必須包括定義它的類別或結構。 這表示類別或結構必須以下列的資料型別出現:

  • 一元運算子的運算元。

  • 至少為二元運算子的任一個運算元。

  • 轉換運算子的運算元或傳回型別。

有些運算子具有其他資料型別限制,如下所示:

  • 如果您定義 IsTrue 和 IsFalse 運算子,則兩者都必須傳回 Boolean 型別。

  • 如果您定義 << 和 >> 運算子,則兩者都必須針對 operand2 的 operandtype 指定 Integer 型別。

傳回型別不必對應到任一個運算元的型別。 例如,即使兩個運算元都不是 Boolean,例如 = 或 <> 的比較運算子都可以傳回 Boolean。

邏輯和位元運算子

And、Or、Not 和 Xor 運算子可以在 Visual Basic 中執行邏輯或位元運算。 然而,如果您在類別或結構上定義上述其中一個運算子,則只能定義它的位元運算。

您不能直接利用 Operator 陳述式,定義 AndAlso。 然而,如果您已滿足下列條件,則可以使用 AndAlso:

  • 您在要用於 AndAlso 的相同運算元型別上定義了 And。

  • 您的 And 定義會傳回與定義它的類別或結構相同的型別。

  • 您在定義 And 的類別或結構上已定義了 IsFalse 運算子。

同樣地,如果您已利用類別或結構的傳回型別,在相同運算元上定義 Or,並且在類別或結構上定義了 IsTrue,則可以使用 OrElse。

擴大和縮小轉換

「擴大轉換」(Widening Conversion) 在執行階段永遠都會成功,然而「縮小轉換」(Narrowing Conversion) 在執行階段則會失敗。 如需詳細資訊,請參閱擴展和縮小轉換 (Visual Basic)

如果您將轉換程序宣告為 Widening,則程序程式碼不得產生任何失敗。 這表示:

  • 它永遠必須傳回型別 type 的有效值。

  • 它必須處理所有可能的例外狀況 (Exception) 和其他錯誤情況。

  • 它必須處理所呼叫之程序傳回的任何錯誤。

如果轉換程序有可能不成功,或它有可能會造成無法處理的例外狀況,則您必須將它宣告為 Narrowing。

範例

下列程式碼範例使用 Operator 陳述式定義結構的大綱,這個結構包括 And、Or、IsFalse 和 IsTrue 運算子的運算子程序。 And 和 Or 各採用型別 abc 的兩個運算元並且傳回型別 abc。 IsFalse 和 IsTrue 各採用型別 abc 的單一運算元並且傳回型別 Boolean。 這些定義會允許呼叫程式碼使用 And、AndAlso、Or 和 OrElse 與型別 abc 的運算元搭配。

Public Structure abc
    Dim d As Date
    Public Shared Operator And(ByVal x As abc, ByVal y As abc) As abc
        Dim r As New abc
        ' Insert code to calculate And of x and y.
        Return r
    End Operator
    Public Shared Operator Or(ByVal x As abc, ByVal y As abc) As abc
        Dim r As New abc
        ' Insert code to calculate Or of x and y.
        Return r
    End Operator
    Public Shared Operator IsFalse(ByVal z As abc) As Boolean
        Dim b As Boolean
        ' Insert code to calculate IsFalse of z.
        Return b
    End Operator
    Public Shared Operator IsTrue(ByVal z As abc) As Boolean
        Dim b As Boolean
        ' Insert code to calculate IsTrue of z.
        Return b
    End Operator
End Structure

請參閱

工作

HOW TO:定義運算子 (Visual Basic)

HOW TO:定義轉換運算子 (Visual Basic)

HOW TO:呼叫運算子程序 (Visual Basic)

HOW TO:使用定義運算子的類別 (Visual Basic)

參考

IsFalse 運算子 (Visual Basic)

IsTrue 運算子 (Visual Basic)

Widening (Visual Basic)

Narrowing (Visual Basic)

概念

擴展和縮小轉換 (Visual Basic)

運算子程序 (Visual Basic)