Condividi tramite


Istruzione Operator

Aggiornamento: novembre 2007

Consente di dichiarare il simbolo dell'operatore, gli operandi e il codice che definiscono una routine operatore su una classe o una struttura.

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

Parti

  • attrlist
    Facoltativo. Vedere Elenco degli attributi.

  • Public
    Obbligatorio. Indica che questa routine operatore è dotata di un accesso Public (Visual Basic).

  • Overloads
    Facoltativo. Per informazioni, vedere Overloads.

  • Shared
    Obbligatorio. Indica che questa routine operatore è una routine Shared (Visual Basic).

  • Shadows
    Facoltativo. Per informazioni, vedere Shadows.

  • Widening
    Obbligatorio per un operatore di conversione a meno che non si specifichi Narrowing. Indica che questa routine operatore definisce una conversione Conversione verso un tipo di dati più grande. Vedere "Conversioni di ampliamento e restrizione" in questa pagina della Guida.

  • Narrowing
    Obbligatorio per un operatore di conversione a meno che non si specifichi Widening. Indica che questa routine operatore definisce una conversione Conversione verso un tipo di dati più piccolo. Vedere "Conversioni di ampliamento e restrizione" in questa pagina della Guida.

  • operatorsymbol
    Obbligatorio. Il simbolo o l'identificatore dell'operatore definito da questa routine operatore.

  • operand1
    Obbligatorio. Il nome e il tipo del singolo operando di un operatore unario (incluso un operatore di conversione) o l'operando di sinistra di un operatore binario.

  • operand2
    Obbligatorio per gli operatori binari. Il nome e il tipo dell'operando di destra di un operatore binario.

    operand1 e operand2 sono composti dalla sintassi e dalle parti elencate di seguito:

    [ ByVal ] operandname [ As operandtype ]

    Part

    Descrizione

    ByVal

    Facoltativo, ma il meccanismo di passaggio deve essere ByVal.

    operandname

    Obbligatorio. Nome della variabile che rappresenta questo operando. Per informazioni, vedere Nomi di elementi dichiarati.

    operandtype

    Facoltativo a meno che Option Strict sia On. Tipo di dati di questo operando.

  • type
    Facoltativo a meno che Option Strict sia On. Tipo di dati del valore restituito dalla routine operatore.

  • statements
    Facoltativo. Blocco di istruzioni eseguite dalla routine operatore.

  • returnvalue
    Obbligatorio. Il valore restituito dalla routine operatore al codice che effettua la chiamata.

  • EndOperator
    Obbligatorio. Termina la definizione di questa routine operatore.

Note

È possibile utilizzare Operator solo in una classe o struttura. In altre parole il contesto della dichiarazione di un operatore non può essere un file di origine, uno spazio dei nomi, un modulo, un'interfaccia, una routine o un blocco. Per ulteriori informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefinito.

Tutti gli operatori devono essere Public Shared. Non è possibile specificare ByRef, Optional o ParamArray per uno dei due operandi.

Non è possibile utilizzare il simbolo dell'operatore o l'identificatore per contenere un valore restituito. È necessario utilizzare l'istruzione Return ed è necessario che specifichi un valore. È possibile inserire un numero illimitato di istruzioni Return in qualsiasi punto di una routine.

La definizione di un'operatore in questo modo viene denominata overload dell'operatore, sia che si usi o meno la parola chiave Overloads. Nella tabella riportata di seguito vengono elencati gli operatori che è possibile definire.

Tipo

Operatori

Unario

+, -, IsFalse, IsTrue, Not

Binary

+, -, *, /, \, &, ^, >>, <<, =, <>, >, >=, <, <=, And, Like, Mod, Or, Xor

Conversione (unario)

CType

Si noti che l'operatore = nell'elenco binario è l'operatore di confronto e non l'operatore di assegnazione.

Quando si definisce CType, è necessario specificare Widening o Narrowing.

Coppie associate

È necessario definire alcuni operatori come coppie associate. Se si definisce ciascun operatore di tale coppia, è necessario definire anche l'altro. Le coppie associate sono le seguenti:

  • = e <>

  • > e <

  • >= e <=

  • IsTrue e IsFalse

Limitazioni relative ai tipi di dati

È necessario che ogni operatore definito implichi la classe o la struttura nella quale la si definisce. In altre parole è necessario che la classe o la struttura venga specificata come tipo di dati di quanto segue:

  • L'operando di un operatore unario.

  • Almeno uno degli operandi di un operatore binario.

  • L'operando o il tipo restituito di un operatore di conversione.

Alcuni operatori hanno limitazioni relative ai tipi di dati, come illustrato di seguito:

  • Se si definiscono gli operatori IsTrue e IsFalsequesti devono restituire entrambi il tipo Boolean.

  • Se si definiscono gli operatori << e >> questi devono entrambi specificare il tipo Integer per il operandtype di operand2.

Non è necessario che il tipo restituito corrisponda al tipo dell'altro operando. Un operatore di confronto come = o <>, ad esempio, è in grado di restituire Boolean anche se nessuno dei due operandi è Boolean.

Operatori logici e bit per bit

In Visual Basic gli operatori And, Or, Not e Xor sono in grado di eseguire operazioni logiche o bit per bit. Tuttavia se si definisce uno di questi operatori su una classe o struttura, è possibile definire solo il suo funzionamento bit per bit.

Non è possibile definire l'operatore AndAlso direttamente con un'istruzione Operator. Tuttavia è possibile utilizzare AndAlso se si sono soddisfatte le condizioni seguenti:

  • È stato definito And sugli stessi tipi di operandi che si desidera utilizzare per AndAlso.

  • La definizione diAnd restituirà lo stesso tipo della classe o della struttura nella quale si è definita.

  • È stato definito l'operatore IsFalse nella classe o nella struttura nelle quali si è definito And.

Analogamente, è possibile utilizzare OrElse se si è definito Or sugli stessi operandi, con il tipo restituito della classe o struttura e si è definito IsTrue nella classe o struttura.

Conversioni di ampliamento e restrizione

Una conversione di ampliamento ha sempre esito positivo in fase di esecuzione, mentre una conversione di restrizione può non riuscire. Per ulteriori informazioni, vedere Conversioni di ampliamento e restrizione.

Se si dichiara che una routine di conversione sia di Widening, è necessario che il codice della routine non generi alcun errore. In altre parole:

  • Deve sempre restituire un valore valido del tipo type.

  • Deve gestire tutte le eccezioni possibili e le altre condizioni di errore.

  • Deve gestire qualsiasi errore restituito da qualsiasi routine da lei chiamata.

Se esiste anche solo una possibilità che la routine di conversione non abbia esito positivo, o che possa causare un'eccezione non gestita, è necessario dichiararla come Narrowing.

Esempio

Nel codice riportato di seguito viene utilizzata l'istruzioneOperator per definire la struttura che includa le routine dell'operatore per gli operatori And, Or, IsFalse e IsTrue. And e Or prendono entrambi due operandi di tipo abc e il tipo restituito abc. IsFalse e IsTrue prendono entrambi un operando singolo di tipo abc e restituisconoBoolean. Queste definizioni consentono al codice che effettua la chiamata di utilizzare And, AndAlso, Or 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

Attività

Procedura: definire un operatore

Procedura: definire un operatore di conversione

Procedura: chiamare una routine con operatore

Procedura: utilizzare una classe che definisce gli operatori

Concetti

Conversioni di ampliamento e restrizione

Routine di operatore

Riferimenti

Operatore IsFalse

Operatore IsTrue

Conversione verso un tipo di dati più grande

Conversione verso un tipo di dati più piccolo