VB.NET allows user-defined types to overload operators by defining static member
functions using the operator keyword. The operator keyword is used to declare an
operator in a class or struct declaration. Not all operators can be overloaded,
and some that can be overloaded have certain restrictions, as listed in the
given below Table.
| Arithmetic Operators | Concatenation Operators | Comparison Operators | Logical / Bitwise Operators |
| ^ | + | = | Not |
| - | & | <> | And |
| * | | < | AndAlso |
| / | | > | Or |
| \ | | >= | OrElse |
| mod | | <= | Xor |
| + | | | |
| - | | | |
The given below example illustrates overloading on complex numbers.
Example of Operator Overloading
Imports System
Public Class Complex
Public real As Integer
= 0
Public imaginary As Integer
= 0
Public Sub New(ByVal
real As Integer,
ByVal
imaginary As Integer)
Me.real
= real
Me.imaginary
= imaginary
End Sub
Public Shared Operator
+(ByVal
c1 As Complex,
ByVal
c2 As Complex)
As Complex
Return New Complex(c1.real
+ c2.real, c1.imaginary + c2.imaginary)
End Operator
Public Shared Sub
Main()
Dim num1 As New Complex(2,
3)
Dim num2 As New Complex(3,
4)
Dim sum As Complex
= num1 + num2
Console.WriteLine("Real:
{0}", sum.real)
Console.WriteLine("Imaginary:
{0}", sum.imaginary)
Console.ReadLine()
End Sub
End Class
Screen Output Generated from the above code

The next example presents a more sophisticated example of operator overloading.
Example of Sophisticated Operator Overloading
Imports System
Class Rectangle
Private iHeight As Integer
Private
iWidth As Integer
Public Sub New()
Height = 0
Width = 0
End Sub
Public Sub New(ByVal
w As Integer,
ByVal
h As Integer)
Width = w
Height = h
End Sub
Public Property
Width() As Integer
Get
Return iWidth
End Get
Set(ByVal
value As Integer)
iWidth = value
End Set
End Property
Public Property
Height() As Integer
Get
Return iHeight
End Get
Set(ByVal
value As Integer)
iHeight = value
End Set
End Property
Public ReadOnly Property
Area() As Integer
Get
Return Height * Width
End Get
End Property
Public Shared Operator
=(ByVal
a As Rectangle,
ByVal
b As Rectangle)
As Boolean
Return
((a.Height = b.Height)
AndAlso (a.Width = b.Width))
End Operator
Public Shared Operator
<>(ByVal
a As Rectangle,
ByVal
b As Rectangle)
As Boolean
Return Not
(a = b)
End Operator
Public Shared Operator
>(ByVal
a As Rectangle,
ByVal
b As Rectangle)
As Boolean
Return
a.Area > b.Area
End Operator
Public Shared Operator
<(ByVal
a As Rectangle,
ByVal
b As Rectangle)
As Boolean
Return Not
(a > b)
End Operator
Public Shared Operator
>=(ByVal
a As Rectangle,
ByVal
b As Rectangle)
As Boolean
Return
(a > b) OrElse
(a = b)
End Operator
Public Shared Operator
<=(ByVal
a As Rectangle,
ByVal
b As Rectangle)
As Boolean
Return
(a < b) OrElse
(a = b)
End Operator
Public Overrides Function
Equals(ByVal
o As Object)
As Boolean
Return Me.Equals(o)
End Function
Public Overrides Function
GetHashCode() As Integer
Return Me.GetHashCode()
End Function
Public Overrides Function
ToString() As [String]
Return "Height="
+ Height + ",Width="
+ Width
End Function
Public Shared Sub
Main()
Dim objRect1 As New Rectangle()
Dim objRect2 As New Rectangle()
Dim objRect3 As New Rectangle(10,
15)
objRect1.Height = 15
objRect1.Width = 10
objRect2.Height = 25
objRect2.Width = 10
Console.WriteLine("Rectangle#1
", objRect1)
Console.WriteLine("Rectangle#2
", objRect2)
Console.WriteLine("Rectangle#3
", objRect3)
If objRect1 = objRect2 Then
Console.WriteLine("Rectangle1
& Rectangle2 are Equal.")
Else
If
objRect1 > objRect2 Then
Console.WriteLine("Rectangle1
is greater than Rectangle2")
Else
Console.WriteLine("Rectangle1
is lesser than Rectangle2")
End If
End If
If
objRect1 = objRect3 Then
Console.WriteLine("Rectangle1
& Rectangle3 are Equal.")
Else
Console.WriteLine("Rectangle1
& Rectangle3 are not Equal.")
End If
Console.ReadLine()
End Sub
End Class
Screen Output Generated from the above code

Conclusion
Hope this article would have helped you in understanding Overloading in VB.NET.