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

Πώς να εργαστείτε με μεθόδους επέκτασης στο C #

Η γλώσσα προγραμματισμού C # παρέχει υποστήριξη για μεθόδους επέκτασης από το C # 3.0. Μια μέθοδος επέκτασης είναι αυτή που χρησιμοποιείται για την επέκταση της λειτουργικότητας των υπαρχόντων τύπων με την προσθήκη μεθόδων χωρίς την ανάγκη δημιουργίας νέων παραγόμενων τύπων. Δεν χρειάζεται να δημιουργήσετε υποκατηγορίες υπαρχουσών τάξεων ή να μεταγλωττίσετε ή να τροποποιήσετε τις υπάρχουσες τάξεις σας, ώστε να λειτουργούν με μεθόδους επέκτασης. Οι μέθοδοι επέκτασης βελτιώνουν την αναγνωσιμότητα του κωδικού σας, ενώ ταυτόχρονα σας επιτρέπουν να επεκτείνετε τη λειτουργικότητα των υπαρχόντων τύπων.

Οι κοινές μέθοδοι επέκτασης στο .Net περιλαμβάνουν τους τυπικούς τελεστές ερωτήματος LINQ που προσθέτουν επιπλέον δυνατότητες ερωτήματος στο System.Collections.IEnumerable και System.Collections.Generic.IEnumerable τύποι. Σημειώστε ότι μπορείτε να επωφεληθείτε από τις μεθόδους επέκτασης για να επεκτείνετε μια κλάση ή μια διεπαφή, αλλά δεν μπορείτε να παρακάμψετε τις μεθόδους τους. Το MSDN δηλώνει: "Οι μέθοδοι επέκτασης σάς δίνουν τη δυνατότητα να" προσθέσετε "μεθόδους σε υπάρχοντες τύπους χωρίς να δημιουργήσετε έναν νέο παράγωγο τύπο, να μεταγλωττιστεί ξανά ή να τροποποιήσετε με άλλο τρόπο τον αρχικό τύπο. Οι μέθοδοι επέκτασης είναι ένα ειδικό είδος στατικής μεθόδου, αλλά ονομάζονται σαν να ήταν μέθοδοι παρουσίας στον εκτεταμένο τύπο. "

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

Όταν εργάζεστε με μεθόδους επέκτασης, λάβετε υπόψη αυτά τα σημεία:

  • Μια μέθοδος επέκτασης πρέπει να είναι μια στατική μέθοδος
  • Μια μέθοδος επέκτασης πρέπει να βρίσκεται μέσα σε μια στατική τάξη - η κλάση μπορεί να έχει οποιοδήποτε όνομα
  • Η παράμετρος σε μια μέθοδο επέκτασης πρέπει πάντα να έχει τη λέξη-κλειδί "αυτό" πριν από τον τύπο στον οποίο πρέπει να κληθεί η μέθοδος

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

Μέθοδοι επέκτασης προγραμματισμού σε C #

Σε αυτήν την ενότητα θα διερευνήσουμε τον τρόπο προγραμματισμού μεθόδων επέκτασης χρησιμοποιώντας το C #. Η ακόλουθη λίστα κώδικα δείχνει πώς μοιάζει μια μέθοδος επέκτασης.

δημόσια στατική τάξη StringExtensions

    {

δημόσιο στατικό bool IsNumeric (αυτό το string string)

        {

διπλή έξοδος

return double.TryParse (str, έξοδος εξόδου);

        }

    }

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

Δείτε πώς μπορείτε να χρησιμοποιήσετε τη μέθοδο επέκτασης IsNumeric σε μια παρουσία συμβολοσειράς.

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

        {

string str = "100";

εάν (str.IsNumeric ())

Console.WriteLine ("Το αντικείμενο συμβολοσειράς με όνομα str περιέχει αριθμητική τιμή.");

Κονσόλα. Διαβάστε ();

        }

Όταν εκτελείτε το παραπάνω πρόγραμμα, το μήνυμα ("Το αντικείμενο συμβολοσειράς με όνομα str περιέχει αριθμητική τιμή." Εμφανίζεται στο παράθυρο της κονσόλας.

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

Η ακόλουθη κλάση με το όνομα IntegerExtensions περιέχει μια μέθοδο επέκτασης με το όνομα IsEven, η οποία επιστρέφει αληθής αν ο ακέραιος αριθμός στον οποίο καλείται είναι ομοιόμορφος, ψευδώς διαφορετικά.

δημόσια στατική τάξη IntegerExtensions

    {

δημόσιο στατικό bool IsEven (αυτό το int i)

        {

επιστροφή ((i% 2) == 0);

        }

    }

Και, πώς μπορείτε να χρησιμοποιήσετε τη μέθοδο επέκτασης IsEven σε ακέραιο.

int n = 2;

αν (ν. Ακόμα και ())

Console.WriteLine ("Η τιμή του ακέραιου είναι ομοιόμορφη.");