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<=IsTrueaIsFalse
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
IsTrueIsFalseoperátory a , musí oba vracetBooleantyp.Pokud definujete operátory a , musí oba
<<určit typ pro>>Integeroperandtypeoperand2.
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
Andjste stejné typy operandů, které chcete použít proAndAlso.Vaše definice
Andvrátí stejný typ jako třída nebo struktura, na které jste ji definovali.Definovali jste
IsFalseoperátor pro třídu nebo strukturu, pro kterou jste definovaliAnd.
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