Operator – příkaz

Deklaruje symbol operátoru, operandy a kód, které definují proceduru operátoru třídy nebo struktury.

Syntaxe

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

Součástky

attrlist
Nepovinné. Viz seznam atributů.

Public
Povinný: Označuje, že tento operátor má veřejný přístup.

Overloads
Nepovinné. Viz Přetížení.

Shared
Povinný: Označuje, že tento operátor procedura je sdílená procedura.

Shadows
Nepovinné. Podívejte se na stíny.

Widening
Požadováno pro operátor převodu, pokud nezadáte Narrowing. Označuje, že tento operátor procedura definuje rozšiřující převod. Na této stránce nápovědy naleznete informace o rozšiřujících a zúžených převodech.

Narrowing
Požadováno pro operátor převodu, pokud nezadáte Widening. Označuje, že tento operátor procedura definuje zužující převod. Na této stránce nápovědy naleznete informace o rozšiřujících a zúžených převodech.

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

operand1
Povinný: 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
Požadováno pro binární operátory. Název a typ pravého operandu binárního operátoru.

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

[ ByVal ] operandname [ As operandtype ]

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

type
Volitelné, pokud Option Strict není On. Datový typ hodnoty, kterou procedura operátoru vrátí.

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

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

End Operator
Povinný: Ukončí definici tohoto 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 naleznete v tématu Kontexty deklarace a výchozí úrovně přístupu.

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

K uložení návratové hodnoty nelze použít symbol nebo identifikátor operátoru. Příkaz musíte použít Return a musí zadat hodnotu. Libovolný početpříkazůch Return

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

Typ Operátory
Unární +, -, IsFalse, , IsTrueNot
Binární +, -, , /*\&^>><<=<>>>=<<=AndLikeModOrXor
Převod (unární) CType

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

Při definování CTypeje nutné zadat buď Widening nebo Narrowing.

Spárované páry

Je nutné definovat určité operátory jako spárované páry. Pokud definujete některý z těchto dvojic, musíte definovat i druhý operátor. 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é ho definujete. To znamená, že třída nebo struktura se musí zobrazit jako datový typ následujícího:

  • 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ého typu:

  • Pokud definujete operátory IsTrue i IsFalse operátory, musí oba vrátit Boolean typ.

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

Návratový typ nemusí odpovídat typu jednoho operandu. Například relační operátor, například = nebo může vrátitBoolean, i když žádný operand není Boolean<> .

Logické a bitové operátory

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

Operátor nelze definovat AndAlso přímo pomocí Operator příkazu. Pokud však splňujete následující podmínky, můžete použít AndAlso :

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

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

  • Definovali jste IsFalse operátor třídy nebo struktury, na které jste definovali And.

Podobně můžete použít OrElse , pokud jste definovali Or na stejných operandech, s návratovým typem třídy nebo struktury a jste definovali IsTrue třídu nebo strukturu.

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

Rozšiřující převod vždy proběhne úspěšně za běhu, zatímco zužující převod může v době běhu selhat. Další informace naleznete v tématu Rozšíření a zužování převodů.

Pokud deklarujete převodní proceduru Widening, nesmí kód procedury generovat žádné chyby. To znamená následující:

  • Musí vždy vrátit platnou hodnotu typu type.

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

  • Musí zpracovávat všechny návraty chyb z jakýchkoli procedur, které volá.

Pokud existuje možnost, že převodní procedura nemusí být úspěšná nebo že může způsobit neošetřenou výjimku, musíte deklarovat, že je Narrowing.

Příklad

Následující příklad kódu používá Operator příkaz k definování osnovy struktury, která zahrnuje operátor procedury pro And, Or, IsFalsea IsTrue operátory. And a Or každý má dva operandy typu abc a návratový typ abc. IsFalse a IsTrue každý má jeden operand typu abc a vrátit Boolean. Tyto definice umožňují volajícímu kódu používat And, AndAlso, Ora 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é