Operátori utasítás
Deklarálja az operátorszimbólumot, az operandusokat és a kódot, amelyek operátori eljárást határoznak meg egy osztályon vagy struktúrán.
Syntax
[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ]
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
[ statements ]
[ statements ]
Return returnvalue
[ statements ]
End Operator
Részek
attrlist
Opcionális. Lásd: Attribútumlista.
Public
Szükséges. Azt jelzi, hogy ez az operátori eljárás nyilvános hozzáféréssel rendelkezik.
Overloads
Opcionális. Lásd: Túlterhelések.
Shared
Szükséges. Azt jelzi, hogy ez az operátori eljárás megosztott eljárás.
Shadows
Opcionális. Lásd: Árnyékok.
Widening
A konvertálási operátorhoz szükséges, hacsak nem adja meg Narrowing
. Azt jelzi, hogy ez az operátori eljárás szélesítési konverziót határoz meg. A súgólapon a "Konvertálások bővítése és szűkítése" című témakörben olvashat.
Narrowing
A konvertálási operátorhoz szükséges, hacsak nem adja meg Widening
. Azt jelzi, hogy ez az operátori eljárás szűkítési konverziót határoz meg. A súgólapon a "Konvertálások bővítése és szűkítése" című témakörben olvashat.
operatorsymbol
Szükséges. Az operátori eljárás által definiált operátor szimbóluma vagy azonosítója.
operand1
Szükséges. Egy nem szereplő operátor (beleértve a konverziós operátort is) vagy a bináris operátor bal operandusának neve és típusa.
operand2
Bináris operátorokhoz szükséges. Egy bináris operátor jobb operandusának neve és típusa.
operand1
és operand2
a következő szintaxist és részeket tartalmazza:
[ ByVal ] operandname [ As operandtype ]
Rész | Leírás |
---|---|
ByVal |
Nem kötelező, de az átadási mechanizmusnak ByValnak kell lennie. |
operandname |
Szükséges. Az operandusnak jelölő változó neve. Lásd: Deklarált elemnevek. |
operandtype |
Nem kötelező, kivéve, ha Option Strict az On . Az operandus adattípusa. |
type
Nem kötelező, kivéve, ha Option Strict
az On
. Az operátori eljárás által visszaadott érték adattípusa.
statements
Opcionális. Az operátori eljárás által futtatott utasítások blokkja.
returnvalue
Szükséges. Az az érték, amelyet az operátori eljárás a hívó kódhoz ad vissza.
End
Operator
Szükséges. Leállítja az operátori eljárás definícióját.
Megjegyzések
Csak osztályban vagy struktúrában használható Operator
. Ez azt jelenti, hogy egy operátor deklarációs környezete nem lehet forrásfájl, névtér, modul, interfész, eljárás vagy blokk. További információ: Deklarációs környezetek és alapértelmezett hozzáférési szintek.
Minden operátornak meg kell lennie Public Shared
. Nem adhatja meg ByRef
az operandusokat Optional
vagy ParamArray
az operandusokat.
Az operátor szimbóluma vagy azonosítója nem használható visszatérési érték tárolására. Az utasítást Return
használnia kell, és meg kell adnia egy értéket. Tetszőleges számú Return
utasítás jelenhet meg az eljárás bármely pontján.
Az operátorok ily módon történő definiálását operátor-túlterhelésnek nevezzük, függetlenül attól, hogy a kulcsszót Overloads
használja-e. Az alábbi táblázat felsorolja a definiálható operátorokat.
Típus | Operátorok |
---|---|
Unáris | + , - , IsFalse , IsTrue Not |
Bináris | + , - , * , / , \ , & ^ , >> , << , = , , <> , > , >= , , < , <= , And , Like , Or Mod ,Xor |
Átalakítás (unary) | CType |
Vegye figyelembe, hogy a =
bináris listában szereplő operátor az összehasonlító operátor, nem pedig a hozzárendelési operátor.
A definiáláskor CType
meg kell adnia vagy Widening
Narrowing
.
Párosított párok
Bizonyos operátorokat párosított párként kell definiálnia. Ha egy ilyen pár bármelyik operátorát definiálja, a másikat is meg kell határoznia. A párosított párok a következők:
=
és<>
>
és<
>=
és<=
IsTrue
ésIsFalse
Adattípus-korlátozások
Minden definiált operátornak tartalmaznia kell azt az osztályt vagy struktúrát, amelyre meghatározza. Ez azt jelenti, hogy az osztálynak vagy struktúrának az alábbi adattípusként kell megjelennie:
Egy unáris operátor operandusa.
Legalább egy bináris operátor operandusa.
A konvertálási operátor operandusa vagy visszatérési típusa.
Egyes operátorok további adattípus-korlátozásokkal rendelkeznek, az alábbiak szerint:
Ha megadja a és
IsFalse
azIsTrue
operátorokat, mindkettőnek a típustBoolean
kell visszaadnia.Ha megadja a és az
<<
operátorokat, mindkettőnek meg kell adnia aInteger
típustoperand2
.operandtype
>>
A visszatérési típusnak nem kell egyeznie egyik operandus típusával sem. Egy összehasonlítási =
operátor például akkor is visszaadhatóBoolean
, <>
ha egyik Boolean
operandus sem.
Logikai és bitenkénti operátorok
A And
, Or
, Not
és Xor
operátorok logikai vagy bitenkénti műveleteket hajthatnak végre a Visual Basicben. Ha azonban az egyik operátort osztályon vagy struktúrán definiálja, csak a bitenkénti műveletet határozhatja meg.
Az operátort AndAlso
nem definiálhatja közvetlenül utasítással Operator
. A következő feltételek teljesülése esetén azonban használhatja AndAlso
:
Ugyanazokat az operandustípusokat definiálta
And
, amelyekhez használni szeretné.AndAlso
A definíció
And
ugyanazt a típust adja vissza, mint az az osztály vagy struktúra, amelyen definiálta.Ön definiálta az operátort
IsFalse
azon az osztályon vagy struktúrán, amelyen definiáltaAnd
.
Hasonlóképpen használhatja OrElse
, ha ugyanazon operandusokon definiálta Or
az osztály vagy struktúra visszatérési típusát, és az osztályon vagy a struktúrán definiálta IsTrue
.
Átalakítások bővítése és szűkítése
A szélesítő átalakítás futásidőben mindig sikeres, míg a szűkítő átalakítás futásidőben meghiúsulhat. További információkért lásd a konverziók kibővítését és szűkítését ismertető témakört.
Ha konverziós eljárást Widening
állít be, az eljáráskód nem okozhat hibákat. Ez a következőt jelenti:
Mindig érvényes típusú
type
értéket kell visszaadnia.Az összes lehetséges kivételt és egyéb hibafeltételt kezelnie kell.
Minden olyan hibát kezelnie kell, amely az általa hívott eljárásokból származik.
Ha lehetséges, hogy egy konvertálási eljárás nem sikerül, vagy hogy kezeletlen kivételt okozhat, deklarálnia kell azt Narrowing
.
Példa
Az alábbi példakód egy Operator
olyan struktúra körvonalának meghatározására szolgál, amely a , Or
, IsFalse
és IsTrue
operátorok operátori eljárásait And
tartalmazza. And
és Or
mindegyik két operandus típusú abc
és visszatérési típusú abc
. IsFalse
és IsTrue
mindegyik egyetlen operandus típusú abc
és visszatérési Boolean
. Ezek a definíciók lehetővé teszik a hívó kód használatát And
, AndAlso
Or
és OrElse
a típus abc
operandusait.
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