Περιγραφή:
Υπάρχουν δύο, η Α και η Β, η Α κληρονομεί την κλάση Β και μετά η Β είναι η γονική κλάση
Έχω ορίσει τις ιδιότητες TestAttribute στην κλάση Α και στην κλάση Β αντίστοιχα...
Στη συνέχεια, πάρτε τα χαρακτηριστικά του αντικειμένου και ο κώδικας έχει ως εξής:
Βρήκα ότι ο αριθμός των αποτελεσμάτων είναι 1 και το χαρακτηριστικό είναι το χαρακτηριστικό που ορίζεται από το Α, όχι το χαρακτηριστικό που ορίζεται από το Β, πόσο μάλλον συγχωνευμένο, γιατί συμβαίνει αυτό???
[help("BaseClass")] publicclass Base{} publicclass Derive : Base{} Υπάρχουν τέσσερις πιθανοί συνδυασμοί εδώ:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false ] [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = false ] [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true ] [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true ] Η πρώτη περίπτωση:
Εάν ρωτήσουμε την κλάση Derive (θα δούμε αργότερα πώς να ρωτήσουμε τις ιδιότητες μιας κλάσης κατά τον χρόνο εκτέλεσης), θα διαπιστώσουμε ότι η δυνατότητα Βοήθειας δεν υπάρχει επειδή η μεταβιβασμένη ιδιότητα έχει οριστεί σε false.
Δεύτερη περίπτωση:
Το ίδιο όπως και στην πρώτη περίπτωση, επειδή το inherited ορίζεται επίσης σε false.
Η τρίτη περίπτωση:
Για να εξηγήσουμε την τρίτη και την τέταρτη περίπτωση, ας προσθέσουμε πρώτα λίγο κώδικα στην παράγωγη κλάση:
[Help("BaseClass")] publicclass Base{}[Help("DeriveClass")] publicclass Derive : Base{} Τώρα ας ρωτήσουμε τη δυνατότητα Βοήθειας, μπορούμε να λάβουμε μόνο τις ιδιότητες της παράγωγης κλάσης, επειδή το inherited έχει οριστεί σε true, αλλά το AllowMultiple έχει οριστεί σε false. Επομένως, η δυνατότητα Βοήθειας της βασικής κλάσης παρακάμπτεται από τη δυνατότητα βοήθειας της παράγωγης κλάσης.
Η τέταρτη περίπτωση:
Εδώ θα διαπιστώσουμε ότι η παράγωγη κλάση έχει τόσο τη δυνατότητα Βοήθειας της βασικής κλάσης όσο και τη δική της δυνατότητα Βοήθειας, επειδή το AllowMultiple έχει οριστεί σε true.
|