Operator — Instrukcja

Deklaruje symbol operatora, operandy i kod definiujący procedurę operatora w klasie lub strukturze.

Składnia

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

generatora

attrlist
Opcjonalny. Zobacz Lista atrybutów.

Public
Wymagany. Wskazuje, że ta procedura operatora ma dostęp publiczny .

Overloads
Opcjonalny. Zobacz Przeciążenia.

Shared
Wymagany. Wskazuje, że ta procedura operatora jest procedurą udostępnioną.

Shadows
Opcjonalny. Zobacz Cienie.

Widening
Wymagane dla operatora konwersji, chyba że określisz wartość Narrowing. Wskazuje, że ta procedura operatora definiuje konwersję rozszerzającą. Zobacz "Rozszerzanie i zawężanie konwersji" na tej stronie Pomocy.

Narrowing
Wymagane dla operatora konwersji, chyba że określisz wartość Widening. Wskazuje, że ta procedura operatora definiuje konwersję zawężającą. Zobacz "Rozszerzanie i zawężanie konwersji" na tej stronie Pomocy.

operatorsymbol
Wymagany. Symbol lub identyfikator operatora, który definiuje ta procedura operatora.

operand1
Wymagany. Nazwa i typ pojedynczego operandu operatora jednoargumentowego (w tym operator konwersji) lub lewy operand operatora binarnego.

operand2
Wymagane dla operatorów binarnych. Nazwa i typ prawego operandu operatora binarnego.

operand1 i mają następującą składnię i operand2 części:

[ ByVal ] operandname [ As operandtype ]

Element opis
ByVal Opcjonalnie, ale mechanizm przekazywania musi mieć wartość ByVal.
operandname Wymagany. Nazwa zmiennej reprezentującej ten operand. Zobacz Nazwy zadeklarowanych elementów.
operandtype Opcjonalnie, chyba że Option Strict ma wartość On. Typ danych tego operandu.

type
Opcjonalnie, chyba że Option Strict ma wartość On. Typ danych wartości zwracana przez procedurę operatora.

statements
Opcjonalny. Blok instrukcji uruchamianych przez procedurę operatora.

returnvalue
Wymagany. Wartość zwracana przez procedurę operatora do kodu wywołującego.

End Operator
Wymagany. Kończy definicję tej procedury operatora.

Uwagi

Można używać Operator tylko w klasie lub strukturze. Oznacza to, że kontekst deklaracji operatora nie może być plikiem źródłowym, przestrzenią nazw, modułem, interfejsem, procedurą lub blokiem. Aby uzyskać więcej informacji, zobacz Konteksty deklaracji i Domyślne poziomy dostępu.

Wszystkie operatory muszą mieć wartość Public Shared. Nie można określić ByRefwartości , Optionallub ParamArray dla argumentu operand.

Nie można użyć symbolu operatora ani identyfikatora do przechowywania wartości zwracanej. Należy użyć instrukcji Return i musi określić wartość. Dowolna liczba instrukcji Return może być wyświetlana w dowolnym miejscu procedury.

Definiowanie operatora w ten sposób jest nazywane przeciążeniem operatora, bez względu na to, czy używasz słowa kluczowego Overloads . W poniższej tabeli wymieniono operatory, które można zdefiniować.

Typ Operatory
Jednoargumentowy +, , -, IsFalse, , IsTrueNot
Plik binarny +, -, , /*\&^>><<=<>>>=<<=AndLikeModOrXor
Konwersja (jednoargumentowa) CType

Należy pamiętać, że operator na = liście binarnej jest operatorem porównania, a nie operatorem przypisania.

Podczas definiowania CTypeelementu należy określić wartość Widening lub Narrowing.

Dopasowane pary

Należy zdefiniować określone operatory jako dopasowane pary. Jeśli zdefiniujesz dowolny operator takiej pary, musisz również zdefiniować drugą. Dopasowane pary są następujące:

  • = i <>

  • > i <

  • >= i <=

  • IsTrue i IsFalse

Ograniczenia typu danych

Każdy zdefiniowany operator musi obejmować klasę lub strukturę, na której ją definiujesz. Oznacza to, że klasa lub struktura musi być wyświetlana jako typ danych następujących:

  • Operand operatora jednoargumentowego.

  • Co najmniej jeden z operandów operatora binarnego.

  • Operand lub zwracany typ operatora konwersji.

Niektóre operatory mają dodatkowe ograniczenia typu danych w następujący sposób:

  • Jeśli zdefiniujesz operatory IsTrue i IsFalse , muszą zwrócić Boolean typ .

  • Jeśli zdefiniujesz operatory i>>, muszą one określić Integer typ elementu operandtypeoperand2.<<

Typ zwracany nie musi odpowiadać typowi argumentu operandu. Na przykład operator porównania, taki jak = lub <> może zwrócić wartość Boolean , nawet jeśli żaden operand nie ma wartości Boolean.

Operatory logiczne i bitowe

Operatory And, Or, Noti Xor mogą wykonywać operacje logiczne lub bitowe w Visual Basic. Jeśli jednak zdefiniujesz jeden z tych operatorów w klasie lub strukturze, możesz zdefiniować tylko jego operację bitową.

Nie można zdefiniować AndAlso operatora bezpośrednio za pomocą instrukcji Operator . Można jednak użyć AndAlso , jeśli spełniono następujące warunki:

  • Zdefiniowano And dla tych samych typów operandów, których chcesz użyć dla elementu AndAlso.

  • Definicja And funkcji zwraca ten sam typ co klasa lub struktura, na której została zdefiniowana.

  • Zdefiniowano IsFalse operator w klasie lub strukturze, na której zdefiniowano Andelement .

Podobnie, można użyć OrElse , jeśli zdefiniowano Or na tych samych operandach, z typem zwrotnym klasy lub struktury i zdefiniowano IsTrue klasę lub strukturę.

Rozszerzanie i zwężanie konwersji

Konwersja rozszerzająca zawsze kończy się powodzeniem w czasie wykonywania, podczas gdy konwersja zawężająca może zakończyć się niepowodzeniem w czasie wykonywania. Aby uzyskać więcej informacji, zobacz Rozszerzanie i zawężanie konwersji.

Jeśli zadeklarowasz procedurę konwersji na Wideningwartość , kod procedury nie może wygenerować żadnych błędów. Oznacza to, że:

  • Zawsze musi zwracać prawidłową wartość typu type.

  • Musi obsługiwać wszystkie możliwe wyjątki i inne warunki błędu.

  • Musi obsługiwać wszelkie zwracane błędy z wszelkich procedur, które wywołuje.

Jeśli istnieje możliwość, że procedura konwersji może się nie powieść lub że może spowodować nieobsługiwany wyjątek, musisz zadeklarować, że ma wartość Narrowing.

Przykład

Poniższy przykład kodu używa instrukcji Operator , aby zdefiniować konspekt struktury, która zawiera procedury operatorów dla Andoperatorów , Or, IsFalsei IsTrue . And każdy Or z nich przyjmuje dwa operandy typu abc i zwracany typ abc. IsFalse każdy IsTrue z nich przyjmuje pojedynczy operand typu abc i zwraca wartość Boolean. Te definicje umożliwiają używanie Andkodu wywołującego , , AndAlsoOri OrElse z operandami 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

Zobacz też