Condividi tramite


Procedura: definire un operatore di conversione

Aggiornamento: novembre 2007

Una volta definita una classe o una struttura, è possibile definire gli operatori di conversione dei tipi tra il tipo della classe o della struttura e un altro tipo di dati (ad esempio Integer, Double o String).

Definire la conversione dei tipi come routine Funzione CType all'interno della classe o della struttura. Tutte le routine di conversione devono essere Public Shared e ognuna deve specificare Conversione verso un tipo di dati più grande oppure Conversione verso un tipo di dati più piccolo.

La definizione di un operatore su una classe o una struttura viene anche detta overload dell'operatore.

Esempio

Nell'esempio riportato di seguito vengono definiti gli operatori di conversione tra una struttura denominata digit e un Byte.

Public Structure digit
Private dig As Byte
    Public Sub New(ByVal b As Byte)
        If (b < 0 OrElse b > 9) Then Throw New _
            System.ArgumentException("Argument outside range for Byte")
        Me.dig = b
    End Sub
    Public Shared Widening Operator CType(ByVal d As digit) As Byte
        Return d.dig
    End Operator
    Public Shared Narrowing Operator CType(ByVal b As Byte) As digit
        Return New digit(b)
    End Operator
End Structure

È possibile testare la struttura digit mediante il codice riportato di seguito.

Public Sub consumeDigit()
    Dim d1 As New digit(4)
    Dim d2 As New digit(7)
    Dim d3 As digit = CType(CByte(3), digit)
    Dim s As String = "Initial 4 generates " & CStr(CType(d1, Byte)) _
        & vbCrLf & "Initial 7 generates " & CStr(CType(d2, Byte)) _
        & vbCrLf & "Converted 3 generates " & CStr(CType(d3, Byte))
    Try
        Dim d4 As digit
        d4 = CType(CType(d1, Byte) + CType(d2, Byte), digit)
    Catch e4 As System.Exception
        s &= vbCrLf & "4 + 7 generates " & """" & e4.Message & """"
    End Try
    Try
        Dim d5 As digit = CType(CByte(10), digit)
    Catch e5 As System.Exception
        s &= vbCrLf & "Initial 10 generates " & """" & e5.Message & """"
    End Try
    MsgBox(s)
End Sub

Vedere anche

Attività

Procedura: definire un operatore

Procedura: chiamare una routine con operatore

Procedura: utilizzare una classe che definisce gli operatori

Procedura: dichiarare una struttura

Concetti

Routine di operatore

Conversioni implicite ed esplicite

Conversioni di ampliamento e restrizione

Riferimenti

Istruzione Operator

Istruzione Structure