Μια λειτουργία που υπήρχε αρκετά χρόνια σε άλλες γλώσσες και έλειπε από την VB ήταν η operator oveloading. Η δυνατότητα δηλαδή να ορίσουμε operators (τελεστές) πάνω στις κλάσεις μας. Ας δανειστούμε από τα μαθηματικά ένα κλασσικό και σχετικά απλό παράδειγμα, τους μιγαδικούς αριθμούς. Αυτοί αποτελούνται από ένα πραγματικό μέρος και ένα φανταστικό μέρος.
Αρχικά λοιπόν η κλάση μας είναι:
Public Class complexNumber
Public real As Double
Public imaginary As Double
Public Sub New(ByVal r As Double, ByVal i As Double)
Me.real = r
Me.imaginary = i
End Sub
Public Overloads Function ToString() As String
Return (Me.real.ToString & " + " & Me.imaginary.ToString & "j")
End Function
End Class
για να προσθέταμε 2 μιγαδικούς αριθμούς θα έπρεπε να φτιάξουμε μια συνάρτηση:
function addComplex(c1 as complexNumber, c2 as complexNumber) as complexNumber
return new complexNumber(c1.real + c2.real, c1.imaginary + c2.imaginary)
end function
στην τελευταία έκδοση όμως της vb μπορούμε να ορίσουμε πώς προσθέτουμε, αφαιρούμε ή ό,τι άλλο θέλουμε τα αντικείμενά μας οπότε έχουμε:
Public Class complexNumber
Public real As Double
Public imaginary As Double
Public Sub New(ByVal r As Double, ByVal i As Double)
Me.real = r
Me.imaginary = i
End Sub
Public Overloads Function ToString() As String
Return (Me.real.ToString & " + " & Me.imaginary.ToString & "j")
End Function
Public Shared Operator +(ByVal c1 As complexNumber, ByVal c2 As complexNumber) As complexNumber
Return New complexNumber(c1.real + c2.real, c1.imaginary + c2.imaginary)
End Operator
Public Shared Operator -(ByVal c1 As complexNumber, ByVal c2 As complexNumber) As complexNumber
Return New complexNumber(c1.real - c2.real, c1.imaginary - c2.imaginary)
End Operator
Public Shared Operator *(ByVal c1 As complexNumber, ByVal c2 As complexNumber) As complexNumber
Return New complexNumber(c1.real * c2.real - c1.imaginary * c2.imaginary, c1.real * c2.imaginary + c1.imaginary * c2.real)
End Operator
End Class
τώρα αρκεί να γράψουμε
....
Dim c1 As complexNumber = New complexNumber(2, 3)
Dim c2 As complexNumber = New complexNumber(6, 7)
Dim c3, c4, c5 As complexNumber
c3 = c1 + c2
c4 = c1 - c2
c5 = c1 * c2
....
Τέλος υπάρχει η περίπτωση να θέλουμε να κάνουμε πράξεις μεταξύ μιγαδικών και πραγματικών αριθμών. Για να το επιτύχουμε αυτό μπορούμε να ορίσουμε πώς θα γίνεται η μετατροπή των πραγματικών (double) σε μιγαδικούς κάνοντας χρήση της CType
Public Class complexNumber
Public real As Double
Public imaginary As Double
Public Sub New(ByVal r As Double, ByVal i As Double)
Me.real = r
Me.imaginary = i
End Sub
Public Overloads Function ToString() As String
Return (Me.real.ToString & " + " & Me.imaginary.ToString & "j")
End Function
Public Shared Operator +(ByVal c1 As complexNumber, ByVal c2 As complexNumber) As complexNumber
Return New complexNumber(c1.real + c2.real, c1.imaginary + c2.imaginary)
End Operator
Public Shared Operator -(ByVal c1 As complexNumber, ByVal c2 As complexNumber) As complexNumber
Return New complexNumber(c1.real - c2.real, c1.imaginary - c2.imaginary)
End Operator
Public Shared Operator *(ByVal c1 As complexNumber, ByVal c2 As complexNumber) As complexNumber
Return New complexNumber(c1.real * c2.real - c1.imaginary * c2.imaginary, c1.real * c2.imaginary + c1.imaginary * c2.real)
End Operator
Public Shared Widening Operator CType(ByVal d As Double) As complexNumber
Return New complexNumber(d, 0)
End Operator
End Class
οπότε μπορούμε να γράψουμε και τα παρακάτω:
.....
Dim c1 As complexNumber = New complexNumber(2, 3)
Dim c2 As double= 3.14159
Dim c3, c4, c5 As complexNumber
c3 = c1 + c2
c4 = c1 - c2
c5 = c1 * c2
....