Megosztás a következőn keresztül:


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 ByRefaz operandusokat Optionalvagy 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, IsTrueNot
Bináris +, -, *, /, \, &^, >>, <<, =, , <>, >, >=, , <, <=, And, Like, OrMod,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 CTypemeg 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 és IsFalse

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 az IsTrue operátorokat, mindkettőnek a típust Boolean kell visszaadnia.

  • Ha megadja a és az << operátorokat, mindkettőnek meg kell adnia a Integer 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 Booleanoperandus 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áltaAnd, 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álta And.

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 Andtartalmazza. 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, AndAlsoOrés OrElse a típus abcoperandusait.

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

Lásd még