共用方式為


Operator 語句

宣告在類別或結構上定義運算符程序的運算符號、作數和程序代碼。

語法

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

組件

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

Public
必須的。 表示此運算符程式具有 公用 存取權。

Overloads
選擇性。 請參閱 多載

Shared
必須的。 指出這個運算子程式是 共享 程式。

Shadows
選擇性。 請參閱 陰影

Widening
除非您指定 Narrowing,否則轉換運算符是必要的。 表示這個運算子程式會定義 「擴大 」轉換。 請參閱此說明頁面上的「擴大和縮小轉換」。

Narrowing
除非您指定 Widening,否則轉換運算符是必要的。 指出這個運算子程式會定義 縮小 轉換。 請參閱此說明頁面上的「擴大和縮小轉換」。

operatorsymbol
必須的。 這個運算子程式所定義的運算符號或標識碼。

operand1
必須的。 一元運算子之單一作數的名稱和類型(包括轉換運算元)或二元運算子的左作數。

operand2
二元運算子的必要專案。 二元運算子右作數的名稱和類型。

operand1operand2 具有下列語法和元件:

[ ByVal ] operandname [ As operandtype ]

部分 說明
ByVal 選擇性,但傳遞機制必須是 ByVal
operandname 必須的。 代表此作數的變數名稱。 請參閱 宣告的項目名稱
operandtype 除非 是 ,否則 Option StrictOn選擇性。 此作數的數據類型。

type
除非 是 ,否則 Option StrictOn選擇性。 運算子程式傳回之值的數據類型。

statements
選擇性。 運算子程序執行的語句區塊。

returnvalue
必須的。 運算子程式傳回給呼叫程式代碼的值。

End Operator
必須的。 終止這個運算子程式的定義。

備註

Operator您只能在類別或結構中使用。 這表示運算符的 宣告內容 不能是來源檔案、命名空間、模組、介面、程式或區塊。 如需詳細資訊,請參閱 宣告內容和預設存取層級

所有運算子都必須是 Public Shared。 您無法為任一作數指定 ByRefOptionalParamArray

您無法使用運算子符號或識別碼來儲存傳回值。 您必須使用 Return 語句,而且必須指定值。 程式中的任何位置都可以顯示任意數目 Return 的語句。

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

類型 運營商
單一運算 +-IsFalseIsTrueNot
二進制 +-*/\&^>><<=<>>>=<<=AndLikeModOrXor
轉換 (一元) CType

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

當您定義 CType時,必須指定 WideningNarrowing

相符的配對

您必須將特定運算子定義為相符的配對。 如果您定義這類配對的任一運算元,您也必須定義另一個運算符。 相符的配對如下:

  • =<>

  • ><

  • >=<=

  • IsTrueIsFalse

數據類型限制

您定義的每個運算子都必須牽涉到您定義它的類別或結構。 這表示類別或結構必須顯示為下列資料類型:

  • 一元運算子的作數。

  • 二元運算子至少一個作數。

  • 作數或轉換運算子的傳回類型。

某些運算符有額外的數據類型限制,如下所示:

  • 如果您定義 IsTrueIsFalse 運算符,它們必須同時傳回 Boolean 類型。

  • 如果您定義 <<>> 運算符,它們必須同時指定 Integeroperand2operandtype別。

傳回型別不需要對應至任一作數的類型。 例如,或 之類的=<>比較運算子即使兩個作數Boolean都不是 ,也可以傳回 Boolean

邏輯和位運算子

AndOrNotXor 運算子可以在 Visual Basic 中執行邏輯或位運算。 不過,如果您在類別或結構上定義其中一個運算符,則只能定義其位運算。

您無法使用 語句直接Operator定義 AndAlso 運算符。 不過,如果您已滿足下列條件,則可以使用 AndAlso

  • 您已在您想要用於AndAlso的相同作數類型上定義And

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

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

同樣地,如果您在相同的作數上定義Or,以及類別或結構的傳回型別,而且已在類別或結構上定義IsTrue,則可以使用 OrElse

擴張和收縮轉換

擴大轉換一律會在運行時間成功,而縮小轉換在運行時間可能會失敗。 如需詳細資訊,請參閱 擴大和縮小轉換

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

  • 它一律必須傳回 類型 type的有效值。

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

  • 它必須處理從它呼叫的任何程式傳回的任何錯誤。

如果轉換程式可能不成功,或可能導致未處理的例外狀況,您必須將其宣告為 Narrowing

範例

下列程式代碼範例會Operator使用 語句來定義結構的大綱,其中包含、 OrIsFalseIsTrue 運算子的And運算符程式。 AndOr 各接受兩個作數的類型 abc 和傳回型別 abcIsFalseIsTrue 各接受類型的 abc 單一作數,並傳回 Boolean。 這些定義可讓呼叫端程式代碼搭配 型別 的作數使用AndAndAlsoOrOrElseabc

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

另請參閱