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
, Optional
nebo 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 , , 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 relační operátor, nikoli operátor přiřazení.
Při definování CType
je 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
aIsFalse
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
iIsFalse
operátory, musí oba vrátitBoolean
typ.Pokud definujete operátory
<<
a>>
operátory, musí oba určitInteger
typ prooperandtype
hodnotuoperand2
.
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
, Not
a 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ů, proAndAlso
které 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 definovaliAnd
.
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
, IsFalse
a 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
, 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