如何:定义转换运算符

更新:2007 年 11 月

如果已定义了类或结构,则可以定义类或结构的类型与其他数据类型(如 Integer、Double 或 String)之间的类型转换运算符。

将类型转换定义为类型或结构中的 CType 函数过程。所有转换过程必须为 Public Shared,并且每个转换过程必须指定 WideningNarrowing

在类或结构上定义一个运算符也称为“重载”该运算符。

示例

下面的示例定义名称为 digit 的结构与 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

可以使用下面的代码测试结构 digit。

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

请参见

任务

如何:定义运算符

如何:调用运算符过程

如何:使用定义运算符的类

如何:声明结构

概念

运算符过程

隐式转换和显式转换

扩大转换和收缩转换

参考

Operator 语句

Structure 语句