Operator – příkaz

Deklaruje symbol operátoru, operandy a kód definující proceduru operátoru ve třídě nebo struktuře.

Syntax

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

Součásti

attrlist
Nepovinný parametr. Viz Seznam atributů.

Public
Povinná hodnota. Označuje, že tato procedura operátoru má veřejný přístup.

Overloads
Nepovinný parametr. Viz Přetížení.

Shared
Povinná hodnota. Označuje, že tato procedura operátoru je procedura Shared.

Shadows
Nepovinný parametr. Viz Stíny.

Widening
Vyžaduje se pro operátor převodu, pokud nezadáte Narrowing . Označuje, že tento postup operátoru definuje rozšiřující převod. Viz Rozšíření a zúžení převodů na této stránce nápovědy.

Narrowing
Vyžaduje se pro operátor převodu, pokud nezadáte Widening . Označuje, že tato procedura operátoru definuje zužující převod. Viz Rozšíření a zúžení převodů na této stránce nápovědy.

operatorsymbol
Povinná hodnota. Symbol nebo identifikátor operátoru, který tento operátor definuje.

operand1
Povinná hodnota. Název a typ jednoho operandu unárního operátoru (včetně operátoru převodu) nebo levého operandu binárního operátoru.

operand2
Vyžaduje se pro binární operátory. Název a typ pravého operandu binárního operátoru.

operand1``operand2a mají následující syntaxi a části:

[ ByVal ] operandname [ As operandtype ]

Část Popis
ByVal Volitelné, ale mechanismus předávání musí být ByVal.
operandname Povinná hodnota. Název proměnné představující tento operand. Viz Deklarované názvy elementů.
operandtype Nepovinné, Option Strict pokud není On . Datový typ tohoto operandu.

type
Nepovinné, Option Strict pokud není On . Datový typ hodnoty, která vrací procedura operátoru.

statements
Nepovinný parametr. Blok příkazů, které spouští procedura operátoru.

returnvalue
Povinná hodnota. Hodnota, kterou procedura operátoru vrátí volajícího kódu.

End Operator
Povinná hodnota. Ukončí definici této procedury operátoru.

Poznámky

Můžete použít Operator pouze ve třídě nebo struktuře. To znamená, že kontext deklarace pro operátor nemůže být zdrojový soubor, obor názvů, modul, rozhraní, procedura nebo blok. Další informace najdete v tématu Kontexty deklarace a Výchozí úrovně přístupu.

Všechny operátory musí být Public Shared . Nelze zadat ByRef , nebo pro jeden Optional ParamArray operand.

K umístění návratové hodnoty nelze použít symbol ani identifikátor operátoru. Je nutné použít Return příkaz a musí zadat hodnotu. Libovolný počet Return příkazů se může objevit kdekoli v proceduře.

Definování operátoru tímto způsobem se nazývá přetěžování operátoru bez ohledu na to, jestli použijete klíčové Overloads slovo . Následující tabulka uvádí operátory, které můžete definovat.

Typ Operátory
Unární +, -, IsFalse, IsTrue, Not
Binární +, -, *, /, \, &, ^, >>, <<, =, <>, >, >=, <, <=, And, Like, Mod, Or, Xor
Převod (unární) CType

Všimněte = si, že operátor v binárním seznamu je operátor porovnání, nikoli operátor přiřazení.

Při definování CType musíte zadat buď Widening , nebo Narrowing .

Odpovídající páry

Určité operátory je nutné definovat jako odpovídající páry. Pokud definujete některý z operátorů takového páru, musíte definovat i druhý. Spárované páry jsou následující:

  • = a <>

  • > a <

  • >= a <=

  • IsTrue a IsFalse

Omezení datových typů

Každý operátor, který definujete, musí zahrnovat třídu nebo strukturu, na které ji definujete. To znamená, že třída nebo struktura musí být zobrazena jako datový typ následujícího typu:

  • Operand unárního operátoru.

  • Alespoň jeden z operandů binárního operátoru.

  • Operand nebo návratový typ operátoru převodu.

Některé operátory mají další omezení datových typů, a to následujícím způsobem:

  • Pokud definujete IsTrue IsFalse operátory a , musí oba vracet Boolean typ.

  • Pokud definujete operátory a , musí oba << určit typ pro >> Integer operandtype operand2 .

Návratový typ nemusí odpovídat typu ani jednoho operandu. Například operátor porovnání, jako je nebo = , může vrátit i v <> Boolean případě, že žádný operand není Boolean .

Logické a bitové operátory

Operátory , , a And mohou provádět logické nebo Or Not Xor bitové operace v Visual Basic. Pokud však jeden z těchto operátorů definujete ve třídě nebo struktuře, můžete definovat pouze její bitovou operaci.

Operátor nelze definovat AndAlso přímo pomocí Operator příkazu . Můžete ale použít , AndAlso pokud jste splnili následující podmínky:

  • Definovali And jste stejné typy operandů, které chcete použít pro AndAlso .

  • Vaše definice And vrátí stejný typ jako třída nebo struktura, na které jste ji definovali.

  • Definovali jste IsFalse operátor pro třídu nebo strukturu, pro kterou jste definovali And .

Podobně můžete použít , pokud jste definovali na stejných operandech, s návratový typ třídy nebo struktury a jste definovali OrElse Or ve třídě nebo IsTrue struktuře.

Rozšíření a zúžení převodů

Rozšiřující převod je vždy úspěšný za běhu, zatímco zužující převod může selhat za běhu. Další informace najdete v tématu Rozšíření a zúžení převodů.

Pokud deklarujete postup převodu na , nesmí kód Widening procedury generovat žádná selhání. To znamená následující:

  • Vždy musí vracet platnou hodnotu typu type .

  • Musí zpracovávat všechny možné výjimky a další chybové podmínky.

  • Musí zpracovat všechny chyby, které vrací ze všech procedur, které volá.

Pokud existuje možnost, že postup převodu nemusí být úspěšný nebo že by mohl způsobit neošetřenou výjimku, musíte ji deklarovat jako Narrowing .

Příklad

Následující příklad kódu používá Operator příkaz k definování obrysu struktury, která obsahuje procedury operátoru pro And operátory,, a Or IsFalse IsTrue . And a Or každá z nich přijímá dva operandy typu abc a návratového typu abc . IsFalse a IsTrue každý z nich vezme jeden operand typu abc a vrátí Boolean . Tyto definice umožňují, aby volající kód používal And , AndAlso , Or a OrElse s operandy typu 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

Viz také