Condividi tramite


Istruzione Operator

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
    Obbligatoria. Indica che questa routine operatore è dotata di un accesso Public (Visual Basic).

  • Overloads
    Facoltativo. Per informazioni, vedere Overloads (Visual Basic).

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

  • Shadows
    Facoltativo. Per informazioni, vedere Shadows (Visual Basic).

  • Widening
    Obbligatorio per un operatore di conversione a meno che non si specifichi Narrowing. Indica che questa routine operatore definisce una conversione Widening (Visual Basic). 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 Narrowing (Visual Basic). 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 ]

    Parte

    Oggetto di descrizione

    ByVal

    Facoltativo, ma il meccanismo di passaggio deve essere ByVal (Visual Basic).

    operandname

    Obbligatoria. Nome della variabile che rappresenta questo operando. Per informazioni, vedere Nomi di elementi dichiarati (Visual Basic).

    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 predefiniti (Visual Basic).

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 sono elencati gli operatori che è possibile definire.

Digitare

Operatori

Unario

+, -, IsFalse, IsTrue, Not

Binario

+, -, *, /, \, &, ^, >>, <<, =, <>, >, >=, <, <=, 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 (Visual Basic).

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

Nell'esempio di codice riportato di seguito viene utilizzata l'istruzione Operator per definire il contorno di una struttura che include routine di operatore per gli operatori And, Or, IsFalse e IsTrue. Gli operatori And e Or accettano entrambi due operatori di tipo abc e restituiscono il tipo abc. Gli operatori IsFalse e IsTrue accettano entrambi un singolo operando di tipo abc e restituiscono il tipo Boolean. 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 (Visual Basic)

Procedura: definire un operatore di conversione (Visual Basic)

Procedura: chiamare una routine di operatore (Visual Basic)

Procedura: utilizzare una classe che definisce gli operatori (Visual Basic)

Riferimenti

Operatore IsFalse (Visual Basic)

Operatore IsTrue (Visual Basic)

Widening (Visual Basic)

Narrowing (Visual Basic)

Concetti

Conversioni di ampliamento e restrizione (Visual Basic)

Routine di operatore (Visual Basic)