运算符过程 (Visual Basic)
运算符过程是一系列 Visual Basic 语句,这些语句在您所定义的类或结构上定义标准运算符(例如 *、<> 或 And)的行为。 这也称为“运算符重载”。
何时定义运算符过程
当您定义好类或结构后,可以将变量声明为所定义的类或结构的类型。 有时,这样的变量需要作为表达式的一部分参与到运算中。 若要执行此操作,它必须是运算符的一个操作数。
Visual Basic 仅在其基本数据类型上定义运算符。 在一个或两个操作数都是您的类或结构的类型时,可以定义一个运算符的行为。
有关更多信息,请参见 Operator 语句。
运算符过程的类型
运算符过程可以是下面的一种类型:
一元运算符的定义,其中的参数是您的类或结构的类型。
一个二元运算符的定义,其中至少一个参数是您的类或结构的类型。
一个转换运算符的定义,其中的参数是您的类或结构的类型。
一个转换运算符的定义,返回您的类或结构的类型。
转换运算符总是一元运算符,您也总是将 CType 用作所定义的运算符。
声明语法
声明运算符过程的语法如下所示:
Public Shared [Widening | Narrowing] Operatoroperatorsymbol (operand1 [, operand2]) As datatype
' Statements of the operator procedure.
End Operator
仅在类型转换运算符上使用 Widening 或 Narrowing 关键字。 类型转换运算符的符号总是 CType 函数 (Visual Basic)。
声明两个操作数以定义一个二元运算符,声明一个操作数以定义一个一元运算符(包括类型转换运算符)。 所有操作数都必须声明为 ByVal。
用与声明 Sub 过程 (Visual Basic) 的参数相同的方法声明每个操作数。
数据类型
因为是在已定义的类或结构上定义运算符,所以至少其中一个操作数必须是该类或结构的数据类型。 对于类型转换运算符,操作数或返回类型必须是类或结构的数据类型。
有关更多详细信息,请参见Operator 语句。
调用语法
使用表达式中的运算符符号隐式调用运算符过程。 按照为预定义运算符提供操作数的方法提供操作数。
隐式调用运算符过程的语法如下所示:
Dim testStruct As 结构名
Dim testNewStruct As structurename = testStruct operatorsymbol 10
声明与调用阐释
下面的结构将有符号的 128 位整数值存储为高序部分和低序部分。 它将 + 运算符定义为将两个 veryLong 值相加并生成结果 veryLong 值。
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
下面的示例演示对 veryLong 上定义的 + 运算符的典型调用。
Dim v1, v2, v3 As veryLong
v1.highOrder = 1
v1.lowOrder = Long.MaxValue
v2.highOrder = 0
v2.lowOrder = 4
v3 = v1 + v2
有关更多信息和示例,请参见 Operator Overloading in Visual Basic 2005(Visual Basic 2005 中的运算符重载)。