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ć ByRef
wartości , Optional
lub 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 , , IsTrue Not |
Plik binarny | + , - , , / * \ & ^ >> << = <> > >= < <= And Like Mod Or Xor |
Konwersja (jednoargumentowa) | CType |
Należy pamiętać, że operator na =
liście binarnej jest operatorem porównania, a nie operatorem przypisania.
Podczas definiowania CType
elementu 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
iIsFalse
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
iIsFalse
, muszą zwrócićBoolean
typ .Jeśli zdefiniujesz operatory i
>>
, muszą one określićInteger
typ elementuoperandtype
operand2
.<<
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
, Not
i 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 elementuAndAlso
.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 zdefiniowanoAnd
element .
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 Widening
wartość , 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 And
operatorów , Or
, IsFalse
i 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 And
kodu wywołującego , , AndAlso
Or
i 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