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

Πώς να εργαστείτε με χαρακτηριστικά στο C #

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

Ένα χαρακτηριστικό είναι στην πραγματικότητα ένα αντικείμενο που σχετίζεται με οποιοδήποτε από αυτά τα στοιχεία: Assembly, Class, Method, Delegate, Enum, Event, Field, Interface, Property και Struct. Μπορούν να χρησιμοποιηθούν για τη συσχέτιση δηλωτικών πληροφοριών - μπορείτε να ανακτήσετε τέτοιες πληροφορίες κατά το χρόνο εκτέλεσης σε μεταγενέστερο χρονικό σημείο, εάν χρειαστεί να χρησιμοποιήσετε προβληματισμό. Με άλλα λόγια, μπορείτε να χρησιμοποιήσετε χαρακτηριστικά για να εισάγετε πρόσθετες πληροφορίες στα συγκροτήματα που μπορούν να υποβληθούν σε ερώτηση κατά το χρόνο εκτέλεσης, εάν χρειαστεί χρησιμοποιώντας ανάκλαση. Ένα χαρακτηριστικό περιλαμβάνει το όνομά του και προαιρετικά, μια λίστα παραμέτρων. Το όνομα χαρακτηριστικού αντιστοιχεί στην κλάση χαρακτηριστικών.

Μπορείτε να εκμεταλλευτείτε τα χαρακτηριστικά για την επικύρωση των επιχειρηματικών αντικειμένων στην εφαρμογή σας. Υπάρχουν δύο τύποι χαρακτηριστικών - εγγενή χαρακτηριστικά και προσαρμοσμένα χαρακτηριστικά. Ενώ το πρώτο είναι διαθέσιμο ως μέρος του πλαισίου .Net, το δεύτερο μπορεί να εφαρμοστεί αντλώντας μια κλάση από την κλάση System.Attribute. Το MSDN δηλώνει: "Ένα χαρακτηριστικό είναι ένα κομμάτι πρόσθετων δηλωτικών πληροφοριών που καθορίζονται για μια δήλωση."

Ας βρούμε τώρα κάποιο κωδικό. Το χαρακτηριστικό Obsolete μπορεί να χρησιμοποιηθεί για να υποδηλώσει μια μέθοδο ως ξεπερασμένη - μια που δεν πρέπει να χρησιμοποιείται πια καθώς δεν είναι πλέον απαραίτητη ή μπορεί να έχει κάποια άλλη εναλλακτική λύση. Το ακόλουθο απόσπασμα κώδικα δείχνει πώς μπορείτε να χρησιμοποιήσετε το χαρακτηριστικό Obsolete πάνω από μια δήλωση μεθόδου.

[Ξεπερασμένο ("Αυτή η μέθοδος είναι ξεπερασμένη ...")]

δημόσιο στατικό κενό DoSomeWork ()

        {

// Κάποιος κωδικός

        }

Εάν χρησιμοποιείτε αυτήν τη μέθοδο στον κώδικά σας και μεταγλωττίσετε το πρόγραμμά σας, θα εμφανιστεί μια προειδοποίηση στο παράθυρο εξόδου του Visual Studio IDE. Έτσι, μπορείτε να αγνοήσετε αυτήν την προειδοποίηση εάν θέλετε. Τώρα, τι γίνεται αν θέλετε οι προγραμματιστές σας να μην χρησιμοποιούν αυτήν τη μέθοδο καθόλου; Λοιπόν, μπορείτε στη συνέχεια να χρησιμοποιήσετε τη δεύτερη παράμετρο (είναι προαιρετική όμως) δηλώνοντας το χαρακτηριστικό Ξεπερασμένο. Εδώ είναι η τροποποιημένη έκδοση της μεθόδου DoSomeWork (). Παρατηρήστε τη χρήση της παραμέτρου Boolean αυτή τη φορά.

[Ξεπερασμένο ("Αυτή η μέθοδος είναι ξεπερασμένη ...", αληθινή)]

δημόσιο στατικό κενό DoSomeWork ()

        {

// Κάποιος κωδικός

        }                                                                                                                        

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

Προσαρμοσμένα χαρακτηριστικά

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

χρησιμοποιώντας το Σύστημα;

δημόσια τάξη CustomAttribute: Χαρακτηριστικό

{

}

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

Το παρακάτω απόσπασμα κώδικα απεικονίζει μια τροποποιημένη έκδοση της κατηγορίας προσαρμοσμένων χαρακτηριστικών μας. Σημειώστε τη χρήση ενός κατασκευαστή που αποδέχεται μια συμβολοσειρά ως όρισμα και την εκχωρεί στο μέλος της ιδιωτικής συμβολοσειράς της κλάσης. Αυτό είναι μόνο για λόγους απεικόνισης.

[AttributeUsage (AttributeTargets.All)]

δημόσια τάξη CustomAttribute: Χαρακτηριστικό

    {

ιδιωτικό κείμενο συμβολοσειράς;

δημόσιο CustomAttribute (κείμενο συμβολοσειράς)

        {

αυτό. Κείμενο = κείμενο;

        }

δημόσια συμβολοσειρά Κείμενο

        {

παίρνω

            {

επιστρέψτε αυτό. κείμενο;

            }

σειρά

            {

this.text = τιμή;

            }

        }

    }

Μπορείτε επίσης να καθορίσετε τους στόχους χαρακτηριστικών στους οποίους πρέπει να εφαρμοστεί το προσαρμοσμένο χαρακτηριστικό σας. Δείτε πώς μπορείτε να το κάνετε.

[AttributeUsage (AttributeTargets.Class |

AttributeTargets.Constructor |

AttributeTargets.Field |

AttributeTargets.Μέθοδος |

AttributeTargets.Property,

AllowMultiple = true)]

    δημόσια κλάση CustomAttribute: Χαρακτηριστικό

    {

ιδιωτικό κείμενο συμβολοσειράς;

δημόσιο CustomAttribute (κείμενο συμβολοσειράς)

        {

αυτό. Κείμενο = κείμενο;

        }

δημόσια συμβολοσειρά Κείμενο

        {

παίρνω

            {

επιστρέψτε αυτό. κείμενο;

            }

σειρά

            {

this.text = τιμή;

            }

        }

    }

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

MemberInfo memberInfo = typeof (CustomAttribute);

αντικείμενο [] χαρακτηριστικά = memberInfo.GetCustomAttributes (true);

για (int i = 0, j = χαρακτηριστικά. Μήκος; i <j; i ++)

  {

Console.WriteLine (χαρακτηριστικά [i]);

  }

Τώρα εξετάστε την ακόλουθη τάξη στην οποία θα εφαρμόζαμε το προσαρμοσμένο χαρακτηριστικό μας.

[CustomAttribute ("Γεια σου Κόσμος ...")]

δημόσια τάξη SomeClass

{

}

Σημειώστε πώς χρησιμοποιήθηκε το προσαρμοσμένο χαρακτηριστικό και ένα κείμενο μεταβιβάστηκε ως όρισμα σε αυτό. Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να εκτυπώσετε το περιεχόμενο της ιδιότητας Κείμενο.

MemberInfo memberInfo = typeof (SomeClass);

αντικείμενο [] χαρακτηριστικά = memberInfo.GetCustomAttributes (true);

foreach (χαρακτηριστικό αντικειμένου σε χαρακτηριστικά)

{

CustomAttribute customAttribute = χαρακτηριστικό ως CustomAttribute;

εάν (customAttribute! = null)

Console.WriteLine ("Text = {0}", customAttribute.Text);

αλλού

Console.WriteLine ();

}