Προγραμματισμός

C # 7 σε βάθος: Εξερεύνηση τοπικών λειτουργιών

Η υποστήριξη για τοπικές λειτουργίες είναι μια εξαιρετική νέα δυνατότητα που έχει εισαχθεί στο C # 7. Σημειώστε ότι μπορείτε να ορίσετε τοπικές συναρτήσεις μέσα σε οποιαδήποτε μέθοδο, τον κατασκευαστή μιας κλάσης ή μέσα σε μια ιδιότητα - τόσο του getter όσο και του setter. Όταν συντάσσεται από τον μεταγλωττιστή C #, μια τοπική συνάρτηση μετατρέπεται σε ιδιωτική μέθοδο.

Κατά την ανάπτυξη εφαρμογών, ίσως χρειαστεί συχνά να δημιουργήσετε μεθόδους που δεν επαναχρησιμοποιούνται - τις χρειάζεστε μόνο για αρθρωτότητα. Μπορεί να μην θέλετε οι μέθοδοι σας να είναι μακροχρόνιες, καθώς η διατήρηση τέτοιων μεθόδων θα γινόταν εφιάλτης με την πάροδο του χρόνου. Ωστόσο, μπορεί να καταλήξετε να έχετε πολλές ιδιωτικές μεθόδους που δεν θα επαναχρησιμοποιηθούν, σωστά; Αυτή η νέα δυνατότητα στο C # 7 έρχεται στη διάσωση σε τέτοιες περιπτώσεις - μπορείτε να ορίσετε συναρτήσεις που είναι τοπικές σε άλλο πεδίο, ή μπορεί να βρίσκεται μέσα σε μια άλλη λειτουργία ή ακόμα και μέσα σε μια ιδιότητα (τόσο το getter όσο και το setter).

Φανταστείτε μια κατάσταση όπου θα χρειαστείτε μια λειτουργία βοηθού που θα καλούσατε μόνο μία φορά. Πριν από το C # 7, θα μπορούσατε να το επιτύχετε χρησιμοποιώντας τύπους Func και Action με ανώνυμες μεθόδους. Ωστόσο, υπήρξαν μερικές προκλήσεις. Δεν υποστηρίζουν γενικές παραμέτρους, παραμέτρους και παραμέτρους ref και out.

Με το C # 7 γύρω, μπορείτε τώρα να δηλώσετε τέτοιες λειτουργίες μέσα σε ένα άλλο σώμα του σώματος μιας άλλης λειτουργίας. Τέτοιες λειτουργίες είναι γνωστές ως τοπικές συναρτήσεις. Με άλλα λόγια, η υποστήριξη τοπικών λειτουργιών σάς επιτρέπει να ορίσετε μια συνάρτηση εντός του πεδίου μιας άλλης λειτουργίας.

Εφαρμογή τοπικών συναρτήσεων σε C #

Ας γράψουμε κάποιο κώδικα και να δούμε πώς λειτουργούν οι τοπικές λειτουργίες. Εξετάστε το ακόλουθο απόσπασμα κώδικα. Σημειώστε ότι η μέθοδος αθροίσματος ορίζεται στο κύριο μέρος της κύριας μεθόδου στο απόσπασμα κώδικα που ακολουθεί.

static void Main (συμβολοσειρά [] args)

        {

int Sum (int x, int y)

            {

επιστροφή x + y;

            }

Console.WriteLine (Άθροισμα (10, 20));

Κονσόλα.ReadKey ();

        }

Σε αυτό το παράδειγμα, η μέθοδος Sum είναι μια τοπική συνάρτηση - είναι τοπική στην κύρια μέθοδο. Με άλλα λόγια, η μέθοδος Άθροισμα μπορεί να χρησιμοποιηθεί μόνο μέσα στην Κύρια μέθοδο, δηλαδή στη μέθοδο μέσα στην οποία έχει οριστεί.

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

δημόσια στατική κενή οθόνη (string str)

        {

int ctr = 5;

DisplayText ();

άκυρο DisplayText ()

            {

για (int i = 0; i <ctr; i ++)

Κονσόλα.WriteLine (str);

            }

        }

Τώρα, ανατρέξτε στο απόσπασμα κώδικα που δίνεται παραπάνω. Η μέθοδος Display περιέχει μια παράμετρο συμβολοσειράς και μια ακέραια μεταβλητή μέσα σε αυτήν. Σημειώστε ότι η τοπική συνάρτηση που ορίζεται στη μέθοδο εμφάνισης (ονομάζεται DisplayText) μπορεί να έχει πρόσβαση στις τοπικές μεταβλητές και επίσης το επιχείρημα της μεθόδου εμφάνισης Ωραίο χαρακτηριστικό, έτσι δεν είναι;

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