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

 

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

Ανάθεση αντικειμένου με αναφορά(C#)

Îåêßíçóå áðü ôï ìÝëïò pontifikas. Τελευταία δημοσίευση από το μέλος pontifikas στις 28-06-2005, 13:51. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  28-06-2005, 13:51 3150

    Ανάθεση αντικειμένου με αναφορά(C#)

    Μου δημιουργήθηκε η εξής απορία.
    Στις ανέμελες φοιτητικές εποχές γράφαμε στην C:

    (Ακολουθεί μάλλον λανθασμένος κώδικαςConfused [8-)] .... αλλά για αυτό υπάρχει και ο compiler Stick out tongue [:P] )
    int var1 = 5;
    int *p;

    p = &var1;

    και μετά αλλάζαμε τα φώτα στην p και οι αλλαγές συνέβαιναν και στην var1.

    Αναρωτήθηκα αν μπορούμε να κάνουμε κάτι αντίστοιχο και στην C# με κάποιο αντικείμενο.

    πχ
    (ακολουθεί Σίγουρα λανθασμένος κώδικαςStick out tongue [:P])

    System.Windows.Forms.Control ctrl1 = new System.Windows.Forms.Control(...);
    object obj1 = ref ctrl1;

    και μετά αλλάζοντας τα φώτα στην obj1 να αλλάζει και η ctrl1.

    Δεν θέλω να χρησιμοποιήσω συνάρτηση γιατί θα είναι πολύ "πολύπλοκο" για να αξίζει τον κόπο.

    Ξέρω ότι ένα από τα βασικά features της C# είναι ότι είναι pointer free και ότι ακριβώς μπορεί να θέλει να αποφύγει τέτοια φαινόμενα αλλά....η περιέργεια βλέπετεBig Smile [:D]
  •  28-06-2005, 14:00 3151 σε απάντηση της 3150

    Re: Ανάθεση αντικειμένου με αναφορά(C#)

    Το .NET δουλεύει με references για class types έτσι κι αλλιώς. Μπορείς να γράψεις απλά

    System.Windows.Forms.Control ctrl1 = new System.Windows.Forms.Control(...);
    object obj1 = ctrl1;

    και τελείωσες. Μόνο για τα value types (struct στην C#) δημιουργούνται αντίγραφα των αντικειμένων.

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  28-06-2005, 14:09 3152 σε απάντηση της 3150

    Re: Ανάθεση αντικειμένου με αναφορά(C#)

    Αυτό συμβαίνει έτσι κι αλλιώς στα λεγόμενα reference types, δηλαδή όλα τα types που γίνονται derived από το System.Object, χωρίς την ανάγκη για operators τύπου ref, κλπ.
    Όπερ σημαίνει αν πω:

    Class1 x = new Class1();
    Class1 y; 
    y = x;
    y.prop = 1;


    Τότε το x.prop γίνεται 1. Ουσιαστικά έχω δύο ονομάτα (x και y) για την ίδια θέση μνήμης...


    Vir prudens non contra ventum mingit
  •  28-06-2005, 14:10 3153 σε απάντηση της 3150

    Re: Ανάθεση αντικειμένου με αναφορά(C#)

    Δηλαδή αν σε μια συνάρτηση περάσω όρισμα ένα class type θα είναι με αναφορά και δεν θα χρειάζεται ref?
  •  28-06-2005, 14:46 3154 σε απάντηση της 3153

    Re: Ανάθεση αντικειμένου με αναφορά(C#)

    Πολύ καλά τα λες... Βάλεις δεν βάλεις ref, το ίδιο αποτέλεσμα...


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