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

 

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

Is Operator

Îåêßíçóå áðü ôï ìÝëïò frankie. Τελευταία δημοσίευση από το μέλος frankie στις 12-09-2012, 00:06. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  11-09-2012, 18:54 71222

    Is Operator

    Καλησπερα.θελω να συγκρινω δυο διαφορετικα instances of the same reference type,χρησιμοποιωντας το is operator.

    π.χ if firstperson.firstname is secondperson.firstname then

         .......

    else

    ......

    end if

    το παραπανω μου επιστρεφει true δηλαδη οτι ειναι ιδιο instance ενω δεν ειναι.Το secondperson ειναι instance οπου προεκυψε απο shallow copy...εχει τα ιδια fields και properties(ιδιες τιμες) αλλα ειναι διαφορετικο.Γιατι μου επιστρεφει true???

    Συμπληρωματικα αν συγκρινω τα δυο instances μονο μου επιστρεφει false πραγμα που ειναι αληθες και επιβεβαιωνει οτι ειναι δυο διαφορετικα instances...

    Ευχαριστω

  •  11-09-2012, 20:46 71224 σε απάντηση της 71222

    Απ: Is Operator

    Υποθέτωντας ότι το property firstName είναι string προφανώς δεν είναι δύο διαφορετικά Instances αλλά το ίδιο. Αν πχ έχεις δύο διαφορετικές Μεταβλητές τύπου string οι οποίες έχουν τιμή "abc" σου δείχνουν (->) στην ίδια περιοχή μνήμης. Δες αν θες τον παρακάτω κώδικα. Ενώ οι μεταβλητές α και b δείχουν σε διαφορετικές περιοχές στην μνήμη, το property firstname δείχνει και στις 2 classes στην ίδια.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    Option Strict On
    
    Public Class Form1
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim a As New a
            Dim b As New a
    
            a.Name = "a name"
            b.Name = "a name"
    
            If b.Name Is a.Name Then
                Console.WriteLine("Equal")
            End If
    
            If b IsNot a Then
                Console.WriteLine("Not Equal")
            End If
        End Sub
    
        Private Class a
            Public Property Name As String
        End Class
    
    
        Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
            Dim a As String = "abc"
            Dim b As String = "abc"
    
            If a Is b Then
                Console.WriteLine("Equal")
            End If
    
            If Object.ReferenceEquals(a, b) Then
                Console.WriteLine("Equal")
            End If
    
            b = String.Copy(a) ' New Instance
    
            If a IsNot b Then
                Console.WriteLine("Not Equal")
            End If
    
            If Object.Equals(a, b) Then
                Console.WriteLine("Equal")
            End If
        End Sub
    End Class



  •  12-09-2012, 00:06 71225 σε απάντηση της 71224

    Απ: Is Operator

    Φιλε μου καταλαβα τι λες και ναι σωστα υπεθεσες το irstname ειναι string.Αρχισα να το υποψιαζομαι οταν συνεκρινα τα δυο instances χωρις properties η οταν χρησιμοποιησα σαν property ενα αλλα object(child reference).Το περιεργο ειναι οτι ολο το παραπανω προεκυψε απο βιβλιο που αγορασα και που τελικα μου επιβεβαιωνεις και εσυ οτι εχουν κανει λαθος!!!Σε ευχαριστω γιατι ειχα κολλησει......

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems