Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Programming and More

Δεν μου αρέσει να κλέβω τις ιδέες των άλλων, αλλά λατρεύω να με βοηθούν και και να βοηθάω.

operator overloading στη VB.net 2005

Μια λειτουργία που υπήρχε αρκετά χρόνια σε άλλες γλώσσες και έλειπε από την 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
....

Έχουν δημοσιευτεί Παρασκευή, 30 Ιουνίου 2006 4:00 μμ από το μέλος agmarios

Ενημέρωση για Σχόλια

Αν θα θέλατε να λαμβάνετε ένα e-mail όταν γίνονται ανανεώσεις στο περιεχόμενο αυτής της δημοσίευσης, παρακαλούμε γίνετε συνδρομητής εδώ

Παραμείνετε ενήμεροι στα τελευταία σχόλια με την χρήση του αγαπημένου σας RSS Aggregator και συνδρομή στη Τροφοδοσία RSS με σχόλια

Σχόλια:

Χωρίς Σχόλια

Ποιά είναι η άποψή σας για την παραπάνω δημοσίευση;

(απαιτούμενο)
(προαιρετικό)
(απαιτούμενο)
ÅéóÜãåôå ôïí êùäéêü:
CAPTCHA Image
Καταχώρηση
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems