Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Dichiara il simbolo dell'operatore, gli operandi e il codice che definiscono una routine operatore in una classe o struttura.
Sintassi
[ <attrlist> ] Public [ Overloads ] Shared [ Shadows ] [ Widening | Narrowing ]
Operator operatorsymbol ( operand1 [, operand2 ]) [ As [ <attrlist> ] type ]
[ statements ]
[ statements ]
Return returnvalue
[ statements ]
End Operator
Parti
attrlist
Opzionale. Vedere Elenco attributi.
Public
Obbligatorio. Indica che questa routine dell'operatore ha accesso pubblico .
Overloads
Opzionale. Vedere Overload.
Shared
Obbligatorio. Indica che questa routine dell'operatore è una routine Shared .
Shadows
Opzionale. Vedi Ombre.
Widening
Obbligatorio per un operatore di conversione a meno che non si specifichi Narrowing. Indica che questa routine dell'operatore definisce una conversione Widening . Vedere "Conversioni verso l'estensione e la riduzione" in questa pagina della Guida.
Narrowing
Obbligatorio per un operatore di conversione a meno che non si specifichi Widening. Indica che questa routine dell'operatore definisce una conversione Narrowing . Vedere "Conversioni verso l'estensione e la riduzione" in questa pagina della Guida.
operatorsymbol
Obbligatorio. Simbolo o identificatore dell'operatore definito da questa routine operatore.
operand1
Obbligatorio. Nome e tipo del singolo operando di un operatore unario (incluso un operatore di conversione) o l'operando sinistro di un operatore binario.
operand2
Obbligatorio per gli operatori binari. Nome e tipo dell'operando destro di un operatore binario.
operand1 e operand2 hanno la sintassi e le parti seguenti:
[ ByVal ] operandname [ As operandtype ]
| Parte | Descrizione |
|---|---|
ByVal |
Facoltativo, ma il meccanismo di passaggio deve essere ByVal. |
operandname |
Obbligatorio. Nome della variabile che rappresenta questo operando. Vedere Nomi di elementi dichiarati. |
operandtype |
Facoltativo, a meno che non Option Strict sia On. Tipo di dati di questo operando. |
type
Facoltativo, a meno che non Option Strict sia On. Tipo di dati del valore restituito dalla routine dell'operatore.
statements
Opzionale. Blocco di istruzioni eseguite dalla routine dell'operatore.
returnvalue
Obbligatorio. Valore restituito dalla routine dell'operatore al codice chiamante.
End
Operator
Obbligatorio. Termina la definizione di questa routine dell'operatore.
Osservazioni:
È possibile usare Operator solo in una classe o in una struttura. Ciò significa che il contesto di dichiarazione per un operatore non può essere un file di origine, uno spazio dei nomi, un modulo, un'interfaccia, una routine o un blocco. Per altre informazioni, vedere Contesti di dichiarazione e livelli di accesso predefiniti.
Tutti gli operatori devono essere Public Shared. Non è possibile specificare ByRef, Optionalo ParamArray per uno degli operandi.
Non è possibile utilizzare il simbolo o l'identificatore dell'operatore per contenere un valore restituito. È necessario usare l'istruzione Return e specificare un valore. Qualsiasi numero di Return istruzioni può essere visualizzato in qualsiasi punto della routine.
La definizione di un operatore in questo modo viene chiamata overload dell'operatore, indipendentemente dal fatto che si usi o meno la Overloads parola chiave . Nella tabella seguente sono elencati gli operatori che è possibile definire.
| TIPO | Operatori |
|---|---|
| Unario |
+, -, IsFalse, IsTrueNot |
| Binario |
+, -, , */, \&^>><<=<>>>=<<=AndLike, ModOrXor |
| Conversione (unario) | CType |
Si noti che l'operatore = nell'elenco binario è l'operatore di confronto, non l'operatore di assegnazione.
Quando si definisce CType, è necessario specificare Widening o Narrowing.
Coppie abbinate
È necessario definire determinati operatori come coppie corrispondenti. Se si definisce un operatore di tale coppia, è necessario definire anche l'altro. Le coppie corrispondenti sono le seguenti:
=e<>>e<>=e<=IsTrueeIsFalse
Restrizioni relative ai tipi di dati
Ogni operatore definito deve coinvolgere la classe o la struttura in cui viene definita. Ciò significa che la classe o la struttura deve essere visualizzata come tipo di dati degli elementi seguenti:
Operando di un operatore unario.
Almeno uno degli operandi di un operatore binario.
Operando o il tipo restituito di un operatore di conversione.
Alcuni operatori hanno restrizioni aggiuntive sui tipi di dati, come indicato di seguito:
Se si definiscono gli
IsTrueoperatori eIsFalse, devono restituire entrambi ilBooleantipo.Se si definiscono gli operatori e
>>, entrambi devono specificare ilIntegertipo per dioperand2operandtype.<<
Il tipo restituito non deve corrispondere al tipo di operando. Ad esempio, un operatore di confronto come = o può restituire Boolean anche se nessuno degli operandi è Boolean<> .
Operatori logici e bit per bit
Gli Andoperatori , NotOr, e Xor possono eseguire operazioni logiche o bit per bit in Visual Basic. Tuttavia, se si definisce uno di questi operatori su una classe o una struttura, è possibile definire solo l'operazione bit per bit.
Non è possibile definire l'operatore AndAlso direttamente con un'istruzione Operator . Tuttavia, è possibile usare AndAlso se sono state soddisfatte le condizioni seguenti:
Sono stati definiti
Andgli stessi tipi di operando da usare perAndAlso.La definizione di
Andrestituisce lo stesso tipo della classe o della struttura in cui è stata definita.L'operatore
IsFalseè stato definito nella classe o nella struttura in cui è stato definitoAnd.
Analogamente, è possibile usare OrElse se sono stati definiti Or negli stessi operandi, con il tipo restituito della classe o della struttura ed è stato definito IsTrue nella classe o nella struttura .
Conversioni di allargamento e restringimento
Una conversione verso un tipo di dati più grande ha sempre esito positivo in fase di esecuzione, mentre una conversione verso un tipo di dati più piccolo può avere esito negativo in fase di esecuzione. Per altre informazioni, vedere Conversioni di tipo Widening and Narrowing.
Se si dichiara una routine di conversione come Widening, il codice della routine non deve generare errori. Ciò comporta quanto segue:
Deve restituire sempre un valore valido di tipo
type.Deve gestire tutte le possibili eccezioni e altre condizioni di errore.
Deve gestire qualsiasi errore restituito da qualsiasi routine che chiama.
Se è possibile che una routine di conversione non riesca o che possa causare un'eccezione non gestita, è necessario dichiararla come Narrowing.
Esempio
Nell'esempio di codice seguente viene utilizzata l'istruzione Operator per definire la struttura di una struttura che include procedure di operatore per gli Andoperatori , OrIsFalse, e IsTrue .
And e Or ognuno accetta due operandi di tipo abc e tipo abcrestituito .
IsFalse e IsTrue ognuno accetta un singolo operando di tipo abc e restituisce Boolean. Queste definizioni consentono al codice chiamante di usare And, AndAlsoOr, e OrElse con operandi di tipo 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
Vedere anche
- Operatore IsFalse
- Operatore IsTrue
- Ampliamento
- Restringimento
- Conversioni verso un tipo di dati più esteso e verso un tipo di dati più piccolo
- Procedure dell'operatore
- Procedura: Definire un operatore
- Procedura: Definire un operatore di conversione
- Procedura: Chiamare una routine di operatore
- Procedura: Usare una classe che definisce gli operatori