Routine di operatore (Visual Basic)Operator Procedures (Visual Basic)

Una routine di operatore è una serie di istruzioni Visual Basic che definiscono il comportamento di un operatore standard, ad esempio * , <> o, And su una classe o una struttura definita.An operator procedure is a series of Visual Basic statements that define the behavior of a standard operator (such as *, <>, or And) on a class or structure you have defined. Viene anche chiamato Overload degli operatori.This is also called operator overloading.

Quando definire le routine degli operatoriWhen to Define Operator Procedures

Una volta definita una classe o una struttura, è possibile dichiarare le variabili in modo che siano del tipo della classe o della struttura.When you have defined a class or structure, you can declare variables to be of the type of that class or structure. A volte tale variabile deve partecipare a un'operazione come parte di un'espressione.Sometimes such a variable needs to participate in an operation as part of an expression. A tale scopo, deve essere un operando di un operatore.To do this, it must be an operand of an operator.

Visual Basic definisce gli operatori solo sui relativi tipi di dati fondamentali.Visual Basic defines operators only on its fundamental data types. È possibile definire il comportamento di un operatore quando uno o entrambi gli operandi sono del tipo della classe o della struttura.You can define the behavior of an operator when one or both of the operands are of the type of your class or structure.

Per ulteriori informazioni, vedere istruzione Operator.For more information, see Operator Statement.

Tipi di routine operatoreTypes of Operator Procedure

Una routine di operatore può essere uno dei tipi seguenti:An operator procedure can be one of the following types:

  • Definizione di un operatore unario in cui l'argomento è del tipo della classe o della struttura.A definition of a unary operator where the argument is of the type of your class or structure.

  • Definizione di un operatore binario in cui almeno uno degli argomenti è del tipo della classe o della struttura.A definition of a binary operator where at least one of the arguments is of the type of your class or structure.

  • Definizione di un operatore di conversione in cui l'argomento è del tipo della classe o della struttura.A definition of a conversion operator where the argument is of the type of your class or structure.

  • Definizione di un operatore di conversione che restituisce il tipo della classe o della struttura.A definition of a conversion operator that returns the type of your class or structure.

Gli operatori di conversione sono sempre unari e si utilizza sempre CType come operatore che si sta definendo.Conversion operators are always unary, and you always use CType as the operator you are defining.

Sintassi di dichiarazioneDeclaration Syntax

La sintassi per la dichiarazione di una routine di operatore è la seguente:The syntax for declaring an operator procedure is as follows:

Public Shared [Widening | Narrowing] Operator operatorsymbol ( operand1 [,  operand2 ]) As datatype

' Statements of the operator procedure.

End Operator

Usare la Widening Narrowing parola chiave o solo in un operatore di conversione di tipi.You use the Widening or Narrowing keyword only on a type conversion operator. Il simbolo dell'operatore è sempre la funzione CType per un operatore di conversione di tipi.The operator symbol is always CType Function for a type conversion operator.

Si dichiarano due operandi per definire un operatore binario e si dichiara un operando per definire un operatore unario, incluso un operatore di conversione del tipo.You declare two operands to define a binary operator, and you declare one operand to define a unary operator, including a type conversion operator. Tutti gli operandi devono essere dichiarati ByVal .All operands must be declared ByVal.

Dichiarare ogni operando nello stesso modo in cui si dichiarano i parametri per le sottoprocedure.You declare each operand the same way you declare parameters for Sub Procedures.

Tipo di datiData Type

Poiché si definisce un operatore in una classe o una struttura definita, almeno uno degli operandi deve essere del tipo di dati della classe o della struttura.Because you are defining an operator on a class or structure you have defined, at least one of the operands must be of the data type of that class or structure. Per un operatore di conversione di tipi, l'operando o il tipo restituito deve essere del tipo di dati della classe o della struttura.For a type conversion operator, either the operand or the return type must be of the data type of the class or structure.

Per ulteriori informazioni, vedere istruzione Operator.For more details, see Operator Statement.

Sintassi di chiamataCalling Syntax

Una routine di operatore viene richiamata in modo implicito tramite il simbolo dell'operatore in un'espressione.You invoke an operator procedure implicitly by using the operator symbol in an expression. Gli operandi vengono forniti esattamente come per gli operatori predefiniti.You supply the operands the same way you do for predefined operators.

La sintassi per una chiamata implicita a una routine di operatore è la seguente:The syntax for an implicit call to an operator procedure is as follows:

Dim testStruct As nomestrutturaDim testStruct As structurename

Dim testNewStruct As strutturaname = testStruct simbolooperatore 10Dim testNewStruct As structurename = testStruct operatorsymbol 10

Illustrazione della dichiarazione e della chiamataIllustration of Declaration and Call

Nella struttura seguente viene archiviato un valore intero con segno a 128 bit come parte di ordine superiore e di ordine inferiore costituente.The following structure stores a signed 128-bit integer value as the constituent high-order and low-order parts. Definisce l' + operatore per aggiungere due veryLong valori e generare un valore risultante veryLong .It defines the + operator to add two veryLong values and generate a resulting veryLong value.

Public Structure veryLong
    Dim highOrder As Long
    Dim lowOrder As Long
    Public Shared Operator +(ByVal v As veryLong, 
                             ByVal w As veryLong) As veryLong
        Dim sum As New veryLong
        sum = v
        Try
            sum.lowOrder += w.lowOrder
        Catch ex As System.OverflowException
            sum.lowOrder -= (Long.MaxValue - w.lowOrder + 1)
            sum.highOrder += 1
        End Try
        sum.highOrder += w.highOrder
        Return sum
    End Operator
End Structure

Nell'esempio seguente viene illustrata una tipica chiamata all' + operatore definito in veryLong .The following example shows a typical call to the + operator defined on veryLong.

Dim v1, v2, v3 As veryLong
v1.highOrder = 1
v1.lowOrder = Long.MaxValue
v2.highOrder = 0
v2.lowOrder = 4
v3 = v1 + v2

Vedere ancheSee also