Συνιστάται, 2024

Επιλογή Συντάκτη

Διαφορά μεταξύ ref και out σε C #

Τα "Ref" και "Out" είναι οι τροποποιητές παραμέτρων που χρησιμοποιούνται στο C #. Χρησιμοποιώντας το ref και out, μπορείτε να περάσετε οποιοδήποτε τύπο τιμής με αναφορά σε οποιαδήποτε μέθοδο. Ο λόγος μετάδοσης οποιουδήποτε τύπου τιμής από την αναφορά του εισάγει την κύρια διαφορά μεταξύ της λέξης-κλειδιού ref και out. Η λέξη ref δίνει τη δυνατότητα στην ονομαζόμενη μέθοδο να τροποποιήσει το περιεχόμενο του παραθύρου που έχει περάσει σε αυτήν με την λέξη ref. Η λέξη-κλειδί εξόδου επιτρέπει στην ονομαζόμενη μέθοδο να επιστρέφει περισσότερες από μία τιμές σε μία μόνο κλήση. Ας μελετήσουμε τη διαφορά μεταξύ αναφοράς και αναφοράς μαζί με ένα διάγραμμα σύγκρισης.

Συγκριτικό διάγραμμα

Βάση σύγκρισηςΑναφΕξω
ΒασικόςΕπιτρέπει την τροποποίηση της αξίας του επιχειρήματος που προχώρησε με τη λέξη ref.Επιτρέπει μια μέθοδο για την επιστροφή των τιμών που προηγείται μιας λέξης-κλειδιού έξω.
ΑρχικοποίησηΗ παράμετρος ref πρέπει να προετοιμαστεί πριν την κλήση μεθόδου.Η παράμετρος "out" πρέπει να αρχικοποιηθεί εντός της καλούμενης μεθόδου πριν τελειώσει.
ΔήλωσηΗ παράμετρος που πρέπει να μεταβληθεί με μια μέθοδο δηλώνεται ως ref, ενώ η δήλωση μεθόδου και η κλήση μεθόδου.Η παράμετρος που πρέπει να επιστραφεί πρέπει να δηλωθεί ως ref, ενώ η δήλωση μεθόδου και η κλήση μεθόδου.

Ορισμός της λέξης αναφοράς

Το "ref" είναι ένας τροποποιητής παραμέτρων που χρησιμοποιείται όταν υπάρχει ανάγκη κλήσης μιας μεθόδου με κλήση ανά αναφορά. Όταν θέλουμε οι μεταβολές που έγιναν στα επιχειρήματα εντός μιας καλούμενης μεθόδου πρέπει να αντανακλούν στην αρχική τιμή αυτής της μεταβλητής, τότε χρησιμοποιείται ο τροποποιητής παραμέτρων ref. Ο τύπος τιμής που θέλουμε να δηλώσουμε ως ref προηγείται από τη λέξη "ref" κατά τη διάρκεια της δήλωσης μεθόδου και της κλήσης μεθόδου. Περισσότερες από μία παράμετροι μπορούν να δηλωθούν ως "ref" ενώ καλούν και δηλώνουν μια μέθοδο.

 χρησιμοποιώντας το σύστημα. class DemoRef {δημόσιο κενό τετράγωνο (ref int s) {s = s * s; }} class Ref_main {static void Κύριο () {DemoRef ob = νέο DemoRef (); int a = 10; Console.WriteLine ("πριν από μια κλήση μεθόδου:" + a); ob.Square (αναφ.); // Χρησιμοποιείται η λέξη Console.WriteLine ("μετά από κλήση:" + a); }} // έξοδος a πριν από την κλήση μεθόδου: 10 a μετά από κλήση μεθόδου: 100 

Στον παραπάνω κώδικα, η μεταβλητή 'α' περνάει ως όρισμα στην μέθοδο Square (ref a) μαζί με τον τροποποιητή παραμέτρων ref που είναι προσαρτημένος σε αυτήν. Αυτό σημαίνει ότι οποιαδήποτε αλλαγή στην μέθοδο Square (ref a) θα εκτελεστεί στη μεταβλητή 'a' μέσα θα αντικατοπτρίζει στην αρχική τιμή του 'a', εκτός της μεθόδου επίσης.

Υπάρχουν ορισμένα σημαντικά σημεία που πρέπει να θυμόμαστε όταν αντιμετωπίζουμε τον τροποποιητή παραμέτρων "ref".

  • Το επιχείρημα που περνάτε από το ref σε μια μέθοδο πρέπει να προετοιμαστεί πριν την κλήση της μεθόδου.
  • Η μέθοδος δεν πρέπει να εκχωρήσει την αρχική τιμή στο argument ref.
  • Μπορείτε επίσης να χρησιμοποιήσετε το ref μαζί με τη μεταβλητή αναφοράς επίσης.

Ορισμός της λέξης έξω

Κάθε φορά που καλείτε μια μέθοδο, θα επιστρέψει μόνο μία τιμή. Αν θέλετε μια μέθοδος να επιστρέψει περισσότερες από μία τιμές σε μια κλήση, πρέπει να χρησιμοποιηθεί η λέξη-κλειδί "out" μαζί με τις παραμέτρους που θέλετε να επιστρέψετε όταν λήξει η μέθοδος. Μερικές φορές συμβαίνει ότι όταν δεν θέλουμε να περάσουμε τίποτα στη μέθοδο, αλλά θέλουμε να επιστρέψει η μέθοδος κάτι που χρησιμοποιούμε παραμέτρους με μια λέξη-κλειδί έξω. Ας το καταλάβουμε με ένα παράδειγμα.

 χρησιμοποιώντας το σύστημα. class DemoOut {public int Αποσυνθέστε (διπλό x, έξω διπλό κλάσμα) {int whole_num; σύνολο_num = (int) x; κλάσμα = x - ολόκληρο_για; επιστροφή ολόκληρου }} τάξη Out_maint {στατικό κενό Κύριο () {DemoOut ob = νέο DemoOut (); int i; διπλό frac; i = obDecompose (100.125, out frac). // χρησιμοποιημένη λέξη-κλειδί Console.WriteLine ("Ολόκληρο το τμήμα είναι" + i); Console.WriteLine (το τμήμα κλάσματος είναι "+ frac"). }} // Το τμήμα ακέραιων εξόδων είναι 100 Το κλασματικό μέρος είναι 0.125 

Στον παραπάνω κώδικα, επιστρέφονται δύο τιμές με τη μέθοδο Decompose (). Ένας που επιστρέφει με τη λέξη-κλειδί "επιστροφή" δηλαδή whole_num, και άλλα επιστρέφει μια παράμετρο που προηγείται από τη λέξη-κλειδί έξω ενώ η κλήση μεθόδου δηλαδή "frac".

Τα σημαντικά σημεία που πρέπει να θυμάστε σχετικά με τη λέξη κλειδί έξω.

  • Σε αντίθεση με τη λέξη-κλειδί ref, η παράμετρος που χρησιμοποιεί τη λέξη-κλειδί δεν πρέπει να προετοιμαστεί πριν την κλήση μεθόδου.
  • Η μέθοδος που ονομάζεται θα ορίσει μια τιμή στην παράμετρο με μια λέξη-κλειδί εκτός δεδομένου ότι θεωρείται ότι δεν έχει εκχωρηθεί εντός της καλούμενης μεθόδου, δηλαδή θεωρείται ότι δεν έχει αρχική τιμή.
  • Η μέθοδος που ονομάζεται πρέπει να εκχωρήσει μια τιμή στην παράμετρο out πριν τερματιστεί η μέθοδος.
  • Η λέξη-κλειδί εξόδου ισχύει επίσης για τη μεταβλητή αναφοράς.

Βασικές διαφορές μεταξύ του Ref και του Out στο C #

  1. Όταν μια μεταβλητή που προηγείται της λέξης ref διαβιβάζεται σε οποιαδήποτε μέθοδο, τότε οι αλλαγές που έγιναν σε αυτήν μέσα στην μέθοδο αντανακλούν στην αρχική της τιμή. Όταν μεταβιβάζεται μια μεταβλητή που μεταβιβάζεται σε μια μέθοδο από τη λέξη-κλειδί, η μέθοδος την επιστρέφει χωρίς τη χρήση λέξης-κλειδιού επιστροφής.
  2. Η παράμετρος ref πρέπει να προετοιμαστεί πριν μεταφερθεί σε μια μέθοδο. Από την άλλη πλευρά, η παράμετρος "out" πρέπει να αρχικοποιηθεί μέσα στη μέθοδο στην οποία διαβιβάζεται.
  3. Ενώ καλείτε, δηλώνετε ή ορίζετε μια μέθοδο, η παράμετρος ref δηλώνεται ρητά ως αναφορά. Από την άλλη πλευρά, ενώ καλείτε, δηλώνετε ή ορίζετε μια μέθοδο, η παράμετρος ορίζεται ρητά ως έξω.

Συμπέρασμα:

Κάθε φορά που η μεταβλητή πρόκειται να περάσει από την αναφορά σε μια μέθοδο, μπορεί να χρησιμοποιηθεί η λέξη-κλειδί ref-out. Ενώ ο λόγος χρήσης των δύο λέξεων-κλειδιών είναι διαφορετικός όταν η λέξη ref μπορεί να χρησιμοποιηθεί για να αλλάξει την τιμή του όρου που προηγείται της λέξης ref, μεταβιβάζεται στην ονομαζόμενη μέθοδο και η λέξη-κλειδί έξω χρησιμοποιείται για να επιστρέψει την τιμή του argument που προηγείται από τη λέξη-κλειδί έξω.

Top