Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
Części
attrlist
Opcjonalny. Zobacz Lista atrybutów.
Public
To jest wymagane. Wskazuje, że ta procedura operatora ma dostęp publiczny .
Overloads
Opcjonalny. Zobacz Przeciążenia.
Shared
To jest wymagane. 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
To jest wymagane. Symbol lub identyfikator operatora, który definiuje ta procedura operatora.
operand1
To jest wymagane. 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 ]
| Część | Opis |
|---|---|
ByVal |
Opcjonalnie, ale mechanizm przekazywania musi mieć wartość ByVal. |
operandname |
To jest wymagane. 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
To jest wymagane. Wartość zwracana przez procedurę operatora do kodu wywołującego.
End
Operator
To jest wymagane. 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 | Operatorów |
|---|---|
| Jednoargumentowy |
+, , -, IsFalse, , IsTrueNot |
| Dwójkowy |
+, -, , */\&^>><<=<>>>=<<=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<=IsTrueiIsFalse
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
IsTrueiIsFalse, muszą zwrócićBooleantyp .Jeśli zdefiniujesz operatory i
>>, muszą one określićIntegertyp elementuoperandtypeoperand2.<<
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
Anddla tych samych typów operandów, których chcesz użyć dla elementuAndAlso.Definicja
Andfunkcji zwraca ten sam typ co klasa lub struktura, na której została zdefiniowana.Zdefiniowano
IsFalseoperator w klasie lub strukturze, na której zdefiniowanoAndelement .
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 zawęż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