如何:定义运算符 (Visual Basic)

如果您已经定义了一个类或结构,当两个操作数有一个或全部都属于该类或结构的类型时,可以定义某个标准运算符(如 *、<> 或 And)的行为。

将标准运算符定义为类或结构中的一个运算符过程。 所有运算符过程必须为 Public Shared。

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

示例

下面的示例为名为 height 的结构定义 + 运算符。 该结构的高度以英尺和英寸为单位。 1 英寸等于 2.54 厘米,1 英尺等于 12 英寸。 为了确保使用标准形式的值(英寸 < 12.0),构造函数执行模为 12 的运算。 + 运算符使用此构造函数生成标准形式的值。

Public Shadows Structure height
    ' Need Shadows because System.Windows.Forms.Form also defines property Height.
    Private feet As Integer
    Private inches As Double
    Public Sub New(ByVal f As Integer, ByVal i As Double)
        Me.feet = f + (CInt(i) \ 12)
        Me.inches = i Mod 12.0
    End Sub
    Public Overloads Function ToString() As String
        Return Me.feet & "' " & Me.inches & """"
    End Function
    Public Shared Operator +(ByVal h1 As height, 
                             ByVal h2 As height) As height
        Return New height(h1.feet + h2.feet, h1.inches + h2.inches)
    End Operator
End Structure

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

Public Sub consumeHeight()
    Dim p1 As New height(3, 10)
    Dim p2 As New height(4, 8)
    Dim p3 As height = p1 + p2
    Dim s As String = p1.ToString() & " + " & p2.ToString() &
          " = " & p3.ToString() & " (= 8' 6"" ?)"
    Dim p4 As New height(2, 14)
    s &= vbCrLf & "2' 14"" = " & p4.ToString() & " (= 3' 2"" ?)"
    Dim p5 As New height(4, 24)
    s &= vbCrLf & "4' 24"" = " & p5.ToString() & " (= 6' 0"" ?)"
    MsgBox(s)
End Sub

有关更多信息和示例,请参见 Operator Overloading in Visual Basic 2005(Visual Basic 2005 中的运算符重载)。

请参见

任务

如何:定义转换运算符 (Visual Basic)

如何:调用运算符过程 (Visual Basic)

如何:使用定义运算符的类 (Visual Basic)

如何:声明结构 (Visual Basic)

参考

Operator 语句

Structure 语句

Mod 运算符 (Visual Basic)

概念

运算符过程 (Visual Basic)