1. Αντικαταστήστε τα προσβάσιμα πεδία με χαρακτηριστικά
1、. Η σύνδεση δεδομένων .NET υποστηρίζει μόνο τη σύνδεση δεδομένων και μπορείτε να επωφεληθείτε από τα πλεονεκτήματα της σύνδεσης δεδομένων χρησιμοποιώντας χαρακτηριστικά. 2. Στην πρόσβαση λήψης και ρύθμισης στην ιδιοκτησία, μπορείτε να χρησιμοποιήσετε το κλείδωμα για να προσθέσετε υποστήριξη πολλαπλών νημάτων.
2. Μόνο για ανάγνωση (σταθερά χρόνου εκτέλεσης) και CONST (σταθερά χρόνου μεταγλώττισης)
1. Το CONST μπορεί να χρησιμοποιηθεί μόνο για πρωτόγονους τύπους, απαρίθμενα και συμβολοσειρές, ενώ το Readonly μπορεί να είναι οποιοσδήποτε τύπος. 2. Το CONST θα αντικατασταθεί με μια συγκεκριμένη σταθερά κατά το χρόνο μεταγλώττισης, έτσι ώστε εάν χρησιμοποιούνται και οι δύο τιμές CONST και μόνο για ανάγνωση στην αναφορά, η αλλαγή σε μόνο για ανάγνωση θα αλλάξει την αρχική πρόθεση του σχεδίου, η οποία είναι η ανάγκη εκ νέου μεταγλώττισης του αλλαγμένου συγκροτήματος για την εκ νέου αναφορά στη νέα σταθερή τιμή. 3. Το CONST είναι πιο αποτελεσματικό από το readonly, αλλά χάνει την ευελιξία της εφαρμογής.
3. IS και AS
1. Και οι δύο είναι μετατροπές τύπου κατά το χρόνο εκτέλεσης, καθώς οι τελεστές μπορούν να χρησιμοποιηθούν μόνο σε τύπους αναφοράς, ενώ μπορεί να χρησιμοποιήσει τιμές και τύπους αναφοράς. 2. Η συνήθης πρακτική είναι να χρησιμοποιείτε το IS για να προσδιορίσετε τον τύπο και, στη συνέχεια, να επιλέξετε να χρησιμοποιήσετε ως ή έναν ισχυρό τελεστή μετατροπής τύπου (μετατροπή που ορίζεται από έναν χειριστή) επιλεκτικά.
4. ConditionalAttribute αντί για #if #endif条件编译
1. Το ConditionalAttribute χρησιμοποιείται μόνο σε επίπεδο μεθόδου και άλλα στοιχεία όπως τύποι, χαρακτηριστικά κ.λπ. Και #if #endif则不受此限制; 2. Το ConditionalAttribute μπορεί να προσθέσει πολλαπλές λειτουργίες OR (OR) για συνθήκες μεταγλώττισης και #if #endif则可以添加与(AND) [εδώ μπορεί να οριστεί πλήρως ως ένα άλλο ξεχωριστό σύμβολο]. 3. Ο ορισμός ConditioanlAttribute μπορεί να τοποθετηθεί σε ξεχωριστή μέθοδο για να γίνει το πρόγραμμα πιο ευέλικτο.
5. Δώστε τη μέθοδο ToString().
1. Μπορεί να παρέχει λεπτομερείς πληροφορίες στους χρήστες με πιο φιλικό τρόπο. 2. Χρησιμοποιήστε τη μέθοδο IFormatter.ToString() για να παρέχετε πιο ευέλικτη προσαρμογή και εάν προσθέσετε τις διεπαφές IFormatProvider και ICustomFormatter, θα είναι πιο λογικό να προσαρμόσετε την έξοδο του μηνύματος.
6. Η διαφορά μεταξύ τιμής και τύπου αναφοράς
1. Οι τύποι τιμών δεν υποστηρίζουν πολυμορφισμό, ο οποίος είναι κατάλληλος για την αποθήκευση δεδομένων που λειτουργούν από εφαρμογές, ενώ οι αναφορές υποστηρίζουν πολυμορφισμό, ο οποίος είναι κατάλληλος για τον καθορισμό της συμπεριφοράς της εφαρμογής. 2. Για πίνακες που ορίζονται ως τύποι τιμών, η απόδοση του προγράμματος μπορεί να βελτιωθεί σημαντικά. 3. Ο τύπος τιμής έχει μικρότερο κατακερματισμό μνήμης σωρού, σκουπίδια μνήμης και χρόνο έμμεσης πρόσβασης και η επιστροφή του στη μέθοδο γίνεται με τη μορφή αναπαραγωγής για να αποφευχθεί η έκθεση της εσωτερικής δομής στον έξω κόσμο. 4. Οι τύποι τιμών χρησιμοποιούνται στα ακόλουθα σενάρια: Οι ευθύνες των τύπων χρησιμοποιούνται κυρίως για την αποθήκευση δεδομένων. Οι δημόσιες διεπαφές ορίζονται πλήρως από ορισμένα χαρακτηριστικά πρόσβασης μελών δεδομένων. Δεν υπάρχουν ποτέ υποκλάσεις. Δεν υπάρχει ποτέ πολυμορφική συμπεριφορά.
7. Οι τύποι τιμών πρέπει να εφαρμόζονται όσο το δυνατόν πιο σταθεροί και ατομικοί τύποι
1. Κάντε τον κώδικά μας πιο εύκολο στη σύνταξη και τη συντήρηση. 2. Τρεις στρατηγικές για την προετοιμασία των σταθερών: στην κατασκευή. μέθοδος φυτού? Κατασκευάστε μια μεταβλητή βοηθητική κλάση (π.χ. StringBuilder).
8. Βεβαιωθείτε ότι το 0 αξίζει την έγκυρη κατάσταση
1. Η προεπιλεγμένη κατάσταση του τύπου τιμής πρέπει να είναι 0. 2. Το 0 του τύπου απαρίθμησης δεν πρέπει να είναι άκυρο. Στο FlagsAttribute είναι να διασφαλιστεί ότι η τιμή 0 είναι έγκυρη κατάσταση. 3. Όταν η συμβολοσειρά είναι κενή, μπορεί να επιστραφεί μια συμβολοσειρά. κενή συμβολοσειρά για κενό.
9. Πολλαπλές σχέσεις εκπροσώπησης ίσης κρίσης
1. Το ReferenceEquals() καθορίζει ότι οι αναφορές είναι ίσες και πρέπει να ισχύει όταν και οι δύο αναφέρονται στο ίδιο αντικείμενο. 2. Η στατική μέθοδος Equals() χρησιμοποιείται για να γίνει πρώτα κρίση αναφοράς και μετά για να κριθεί ο τύπος τιμής. 3. Για την κρίση του τύπου αναφοράς, μπορείτε να χρησιμοποιήσετε τη μέθοδο επανεγγραφής Equals() όταν χρησιμοποιείτε σημασιολογία τιμών. 4. Κατά την επανεγγραφή της μεθόδου Equals(), η μέθοδος GetHashCode() θα πρέπει επίσης να ξαναγραφτεί και η λειτουργία functionr==() θα πρέπει να παρέχεται ταυτόχρονα.
10. Κατανοήστε τις ελλείψεις της μεθόδου GetHashCode().
1. Το GetHashCode() εφαρμόζεται μόνο σε τιμές κατακερματισμού κλειδιών που βασίζονται σε κατακερματισμό ** που έχουν οριστεί, όπως το HashTable ή το Λεξικό. 2. Το GetHashCode() θα πρέπει να ακολουθεί τους αντίστοιχους τρεις κανόνες: δύο ίσα αντικείμενα θα πρέπει να επιστρέφουν τον ίδιο κωδικό κατακερματισμού. θα πρέπει να είναι μια αμετάβλητη περίπτωση. Η συνάρτηση κατακερματισμού θα πρέπει να παράγει μια τυχαία κατανομή σε όλους τους ακέραιους αριθμούς.
11. Δώστε προτεραιότητα στη χρήση δηλώσεων βρόχου foreach
1. Το foreach μπορεί να εξαλείψει τον έλεγχο του μεταγλωττιστή για το όριο του πίνακα του βρόχου for. 2. Η κυκλική μεταβλητή του foreach είναι μόνο για ανάγνωση και υπάρχει ένας ρητός μετασχηματισμός, ο οποίος δημιουργεί μια εξαίρεση όταν ο τύπος αντικειμένου του αντικειμένου ** είναι λανθασμένος. 3. Το ** που απαιτείται για τη χρήση του foreach είναι: έχετε τη δημόσια μέθοδο GetEnumberator(). Η διεπαφή με δυνατότητα αρίθμησης IE υλοποιείται ρητά. Υλοποιείται η διεπαφή IEnumerator. 4. Το foreach μπορεί να αποφέρει τα οφέλη της διαχείρισης πόρων, επειδή εάν ο μεταγλωττιστής μπορεί να προσδιορίσει τη διεπαφή IDisposable, μπορεί να χρησιμοποιήσει τη βελτιστοποιημένη προσπάθεια... τελικά μπλοκ?
12. Η αρχικοποίηση του προεπιλεγμένου πεδίου είναι καλύτερη από τη δήλωση ανάθεσης
1. Η διάρκεια ζωής του πεδίου θα αρχικοποιήσει τον τύπο τιμής σε 0 και τον τύπο αναφοράς σε null από προεπιλογή. 2. Η προετοιμασία του ίδιου αντικειμένου πολλές φορές θα μειώσει την αποτελεσματικότητα εκτέλεσης του κώδικα. 3. Η τοποθέτηση της αρχικοποίησης του πεδίου στον κατασκευαστή ευνοεί τον χειρισμό εξαιρέσεων.
13. Χρησιμοποιήστε τον στατικό κατασκευαστή για να αρχικοποιήσετε στατικά μέλη
1. Ο στατικός κατασκευαστής θα εκτελεστεί πριν από την πρόσβαση σε οποιαδήποτε μέθοδο, μεταβλητή ή χαρακτηριστικό μιας κλάσης. 2. Τα στατικά πεδία θα εκτελούνται επίσης πριν από τον στατικό κατασκευαστή και ο στατικός κατασκευαστής ευνοεί τον χειρισμό εξαιρέσεων.
14. Χρησιμοποιήστε την αλυσίδα κατασκευαστή (in. Το NET 4.0 λύνει ήδη αυτό το πρόβλημα με προαιρετικές παραμέτρους)
1. Χρησιμοποιήστε το για να παραδώσετε την εργασία αρχικοποίησης σε έναν άλλο κατασκευαστή και χρησιμοποιήστε τη βάση για να καλέσετε τον κατασκευαστή της βασικής κλάσης. 2. Η ακολουθία λειτουργίας των παρουσιών τύπου είναι: ορίστε όλα τα στατικά πεδία σε 0. Εκτέλεση στατικών αρχικοποιητών πεδίου. ένας στατικός κατασκευαστής που εκτελεί τη βασική κλάση. Στατικοί κατασκευαστές που εκτελούν τον τρέχοντα τύπο. Ορίστε όλα τα πεδία παρουσίας σε 0. Εκτέλεση αρχικοποιητών πεδίων παρουσίας. Εκτελέστε τον κατάλληλο κατασκευαστή στιγμιότυπου βασικής κλάσης. Εκτελέστε τον κατασκευαστή στιγμιότυπου του τρέχοντος τύπου.
15. Χρησιμοποιήστε τη χρήση και δοκιμάστε/τελικά δηλώσεις για να καθαρίσετε τους πόρους
Στη μέθοδο Dispose() της διεπαφής IDisposable, η GC.SuppressFinalize() μπορεί να χρησιμοποιηθεί για να ειδοποιήσει τον συλλέκτη απορριμμάτων ότι η τελική λειτουργία δεν εκτελείται πλέον.
16. Ελαχιστοποιήστε τα σκουπίδια μνήμης
1. Χρειάζεται επιπλέον χρόνος επεξεργαστή για την κατανομή και την καταστροφή αντικειμένων σε ένα σωρό. 2. Τεχνικές για τη μείωση του αριθμού των εκχωρημένων αντικειμένων: οι τοπικές μεταβλητές που χρησιμοποιούνται συχνά προωθούνται σε πεδία. Παρέχει μια κλάση που αποθηκεύει κοινές παρουσίες μεμονωμένων αντικειμένων που εκφράζουν συγκεκριμένους τύπους. 3. Χρησιμοποιήστε το StringBuilder για να εκτελέσετε σύνθετες λειτουργίες συμβολοσειράς.
17. Ελαχιστοποιήστε τη συσκευασία και την αποσυσκευασία
1. Δώστε προσοχή στη σιωπηρή μετατροπή ενός τύπου σε System.Object και ο τύπος τιμής δεν πρέπει να αντικατασταθεί με τον τύπο System.Object. 2. Η χρήση διεπαφών αντί για τύπους μπορεί να αποφύγει την πυγμαχία, δηλαδή την εφαρμογή τύπων τιμών από διεπαφές και, στη συνέχεια, την κλήση μελών μέσω διεπαφών.
18. Εφαρμόστε την τυπική λειτουργία απόρριψης
1. Για να χρησιμοποιήσετε πόρους που δεν είναι μνήμης, πρέπει να έχει έναν οριστικοποιητή, ο συλλέκτης απορριμμάτων θα προσθέσει τα υλοποιημένα αντικείμενα τελικού στην ουρά τερματισμού αφού ολοκληρώσει τα αντικείμενα μνήμης που δεν τα έχουν τερματίσει και, στη συνέχεια, ο συλλέκτης απορριμμάτων θα ξεκινήσει ένα νέο νήμα για να εκτελέσει τους τελικοποιητές σε αυτά τα αντικείμενα. Αυτό μπορεί να αποφύγει το πρόβλημα της διαρροής μνήμης που προκαλείται από τη μη αποδέσμευση μη διαχειριζόμενων πόρων μνήμης. 2. Η χρήση της μεθόδου IDisposable.Dispose() απαιτεί τέσσερις πτυχές της εργασίας: απελευθέρωση όλων των μη διαχειριζόμενων πόρων. Απελευθερώστε όλους τους διαχειριζόμενους πόρους. Ορίστε έναν δείκτη κατάστασης για να υποδείξετε εάν η Dispose() έχει εκτελεστεί. Καλέστε το GC.SuppressFinalize(this) για να ακυρώσετε τη λειτουργία τερματισμού του αντικειμένου. 3. Προσθέστε μια προστατευμένη εικονική μέθοδο Dispose() στον τύπο που χρειάζεται πολυμορφισμό και η παραγόμενη κλάση απελευθερώνει την εργασία της ξαναγράφοντας αυτήν τη μέθοδο. 4. Στον τύπο που απαιτεί διεπαφή με δυνατότητα IDisoposable, θα πρέπει να εφαρμόσουμε έναν τερματιστή ακόμα κι αν δεν τον χρειαζόμαστε.
19. Ορίστε και εφαρμόστε διεπαφές σε τύπους κληρονομικότητας
1. Οι άσχετοι τύποι μπορούν να εφαρμόσουν από κοινού μια κοινή διεπαφή και είναι ευκολότερο να εφαρμοστεί μια διεπαφή παρά η κληρονομικότητα. 2. Η διεπαφή είναι σχετικά σταθερή, ενσωματώνει ένα σύνολο λειτουργιών σε μια διεπαφή όπως άλλοι τύποι συμβάσεων υλοποίησης, ενώ η βασική κλάση μπορεί να επεκταθεί με την πάροδο του χρόνου.
20. Διάκριση μεταξύ υλοποίησης διεπαφής και επανεγγραφής εικονικής μεθόδου
1. Κατά την υλοποίηση μιας διεπαφής στη βασική κλάση, η παράγωγη κλάση πρέπει να χρησιμοποιεί νέα για να αποκρύψει τη χρήση της μεθόδου βασικής κλάσης. 2. Η μέθοδος της διεπαφής βασικής κλάσης μπορεί να δηλωθεί ως εικονική μέθοδος και στη συνέχεια να εφαρμοστεί στην παραγόμενη κλάση.
21. Χρησιμοποιήστε την ανάθεση για να εκφράσετε επανακλήσεις
1. Ο ίδιος ο πληρεξούσιος δεν παρέχει καμία καταγραφή εξαίρεσης, επομένως οποιαδήποτε κλήση πληρεξουσίου πολλαπλής διανομής θα τερματίσει ολόκληρη την αλυσίδα κλήσεων. 2. Εμφανίζοντας και καλώντας κάθε προορισμό ανάθεσης στην αλυσίδα πληρεξουσίων, μπορείτε να αποφύγετε τους πληρεξούσιους πολλαπλής διανομής να επιστρέφουν μόνο την έξοδο του τελευταίου πληρεξουσίου.
22. Χρησιμοποιήστε συμβάντα για να ορίσετε εξωτερικές διεπαφές
1. Θα πρέπει να δηλωθεί ως κοινό γεγονός και να αφήσει τον μεταγλωττιστή να δημιουργήσει μεθόδους προσθήκης και αφαίρεσης για εμάς. 2. Χρησιμοποιήστε το κοντέινερ System.ComponentModel.EventHandlerList για να αποθηκεύσετε κάθε πρόγραμμα χειρισμού συμβάντων και χρησιμοποιήστε το για να αποκρύψετε την πολυπλοκότητα όλων των συμβάντων όταν ο τύπος περιέχει μεγάλο αριθμό συμβάντων.
23. Αποφύγετε την επιστροφή αναφορών σε εσωτερικά αντικείμενα κλάσης
1. Δεδομένου ότι η πρόσβαση ενός αντικειμένου τύπου τιμής θα δημιουργήσει ένα αντίγραφο του αντικειμένου, τα χαρακτηριστικά του ορισμού ενός τύπου τιμής δεν θα αλλάξουν καθόλου την κατάσταση μέσα στο αντικείμενο τύπου. 2. Οι σταθεροί τύποι μπορούν να αποφύγουν την αλλαγή της κατάστασης του αντικειμένου. 3. Καθορίστε τη διεπαφή για να περιορίσετε την πρόσβαση σε ένα υποσύνολο για να ελαχιστοποιήσετε τη ζημιά στην εσωτερική κατάσταση του αντικειμένου. 4. Ορίστε ένα αντικείμενο περιτυλίγματος για να περιορίσετε την πρόσβαση σε άλλο αντικείμενο. 5. Όταν ο κωδικός πελάτη αλλάζει τα εσωτερικά στοιχεία δεδομένων, μπορεί να εφαρμοστεί η λειτουργία Observer, έτσι ώστε το αντικείμενο να μπορεί να επαληθεύσει ή να αντιστοιχεί στις αλλαγές.
24. Ο δηλωτικός προγραμματισμός είναι καλύτερος από τον επιτακτικό προγραμματισμό
Μπορεί να αποφευχθεί η πιθανότητα λαθών σε πολλούς παρόμοιους χειρόγραφους αλγόριθμους και να παρέχεται σαφής και ευανάγνωστος κώδικας.
25. Εφαρμόστε τύπους όσο το δυνατόν πιο σειριοποιήσιμους
1. Ο τύπος δεν αντιπροσωπεύει στοιχείο ελέγχου διεπαφής χρήστη, παράθυρο ή φόρμα και ο τύπος πρέπει να υποστηρίζει σειριοποίηση. 2. Κατά την προσθήκη του αποσειριοποιημένου χαρακτηριστικού του NonSerializedAttribute, η προεπιλεγμένη τιμή μπορεί να φορτωθεί με τη μέθοδο OnDeserialization() που υλοποιεί το IDeserializationCallback. 3. Στον έλεγχο έκδοσης, μπορείτε να χρησιμοποιήσετε τη διεπαφή ISerializable για ευέλικτο έλεγχο και να παρέχετε έναν κατασκευαστή σειριοποίησης για την προετοιμασία αντικειμένων σύμφωνα με τα δεδομένα στη ροή και επίσης να απαιτήσετε την άδεια των εξαιρέσεων SerializationFormatter κατά την υλοποίηση. 4. Εάν πρέπει να δημιουργήσετε μια παράγωγη κλάση, πρέπει να παρέχετε μια μέθοδο αγκίστρου για την παράγωγη κλάση.
26. Χρησιμοποιήστε τις διεπαφές IComparable και IComparer για την υλοποίηση σχέσεων ταξινόμησης
1. Η διεπαφή IComparable χρησιμοποιείται για την υλοποίηση της πιο φυσικής σχέσης ταξινόμησης για τύπους, υπερφορτώνοντας τέσσερις τελεστές σύγκρισης και παρέχοντας μια υπερφορτωμένη έκδοση της μεθόδου CompareTo() για την αποδοχή συγκεκριμένων τύπων ως παραμέτρων. 2. Το IComparer χρησιμοποιείται για την παροχή σχέσεων ταξινόμησης που είναι διαφορετικές από το IComparable ή για να μας παρέχει σχέσεις ταξινόμησης που ο ίδιος ο τύπος λέει ότι δεν υλοποιούνται.
27. Αποφύγετε τις διεπαφές με δυνατότητα απομόνωσης
1. Για τύπους τιμών, δεν χρειάζεται να υποστηρίξετε τη διεπαφή ICloneable, απλώς χρησιμοποιήστε την προεπιλεγμένη λειτουργία εκχώρησης. 2. Για βασικές που μπορεί να χρειαστεί να υποστηρίζουν διεπαφές ICloneable, θα πρέπει να δημιουργηθεί ένας προστατευμένος κατασκευαστής αναπαραγωγής για αυτές και να αποφεύγονται οι διεπαφές IConeable.
28. Αποφύγετε τους τελεστές αναγκαστικής μετατροπής
Η χρήση κατασκευαστών αντί για τελεστές μετατροπής μπορεί να κάνει την εργασία μετατροπής πιο ξεκάθαρη, γεγονός που μπορεί εύκολα να οδηγήσει σε μερικά περίεργα σφάλματα λόγω προσωρινών αντικειμένων που χρησιμοποιούνται μετά τη μετατροπή.
29. Εξετάστε το ενδεχόμενο να χρησιμοποιήσετε τον νέο τροποποιητή μόνο όταν η συσσώρευση νέων εκδόσεων προκαλεί προβλήματα
30. Εφαρμόστε συγκροτήματα συμβατά με CLS όσο το δυνατόν περισσότερο 1. Για να δημιουργηθεί ένα συμβατό συγκρότημα, πρέπει να ακολουθούνται δύο κανόνες: οι παράμετροι και οι τύποι τιμών επιστροφής που χρησιμοποιούνται από όλα τα δημόσια και προστατευόμενα μέλη του συγκροτήματος πρέπει να είναι συμβατοί με το CLS. Κάθε δημόσιο και προστατευόμενο μέλος που δεν είναι συμβατό με το CLS πρέπει να έχει μια εναλλακτική λύση συμβατή με το CLS. 2. Μπορείτε να παρακάμψετε τον έλεγχο τύπου συμβατότητας CLS εφαρμόζοντας ρητά τη διεπαφή και το CLSCompliantAttribute δεν θα ελέγξει τη συμβατότητα CLS των ιδιωτικών μελών.
31. Εφαρμόστε μια σύντομη και συνοπτική μέθοδο όσο το δυνατόν περισσότερο
1. Ο μεταγλωττιστής JIT μεταγλωττίζει σε μονάδες μεθόδων και οι μέθοδοι που δεν καλούνται δεν θα μεταγλωττιστούν από το JIT. 2. Εάν ο κωδικός της δήλωσης Case στο μεγαλύτερο Switch αντικατασταθεί με μία μέθοδο κάθε φορά, ο χρόνος που εξοικονομείται από τον μεταγλωττιστή JIT θα πολλαπλασιαστεί. 3. Οι σύντομες και συνοπτικές μέθοδοι και η επιλογή λιγότερων τοπικών μεταβλητών μπορούν να επιτύχουν βελτιστοποιημένη χρήση καταχωρητών. 4. Όσο λιγότεροι κλάδοι ελέγχου στη μέθοδο, τόσο πιο εύκολο είναι για τον μεταγλωττιστή JIT να τοποθετήσει μεταβλητές σε καταχωρητές.
32. Πραγματοποιήστε όσο το δυνατόν περισσότερο συγκροτήματα μικρού μεγέθους και υψηλής συνοχής
1. Τοποθετήστε όλες τις δημόσιες τάξεις και τις κοινές βασικές σε ορισμένα συγκροτήματα, τοποθετήστε τις εργαλείων που παρέχουν λειτουργίες για δημόσιες τάξεις στο ίδιο συγκρότημα, συσκευάστε τις σχετικές δημόσιες διεπαφές στα δικά τους συγκροτήματα και, τέλος, επεξεργαστείτε τις που βρίσκονται σε όλη την οριζόντια θέση στην εφαρμογή. 2. Κατ 'αρχήν, θα πρέπει να δημιουργηθούν δύο τύποι εξαρτημάτων: το ένα είναι ένα μικρό και συγκεντρωτικό συγκρότημα με μια συγκεκριμένη λειτουργία και το άλλο είναι ένα μεγάλο και ευρύ συγκρότημα με κοινές λειτουργίες.
33. Περιορίστε την ορατότητα των τύπων
1. Η χρήση διεπαφών για την έκθεση των λειτουργιών των τύπων μπορεί να μας διευκολύνει να δημιουργήσουμε εσωτερικές χωρίς να περιορίσουμε τη διαθεσιμότητά τους εκτός της διάταξης. 2. Όσο λιγότεροι δημόσιοι τύποι εκτίθενται στον έξω κόσμο, τόσο περισσότερες επιλογές έχετε για μελλοντικές εφαρμογές επέκτασης και αλλαγής.
34. Δημιουργήστε ένα μεγάλο αναλυτικό Web API
Αυτό ελαχιστοποιεί τη συχνότητα και το φόρτο των συναλλαγών μεταξύ μηχανών, τοποθετώντας μεγάλες λειτουργίες και λεπτομερείς εκτελέσεις στον διακομιστή.
35. Η επανεγγραφή είναι καλύτερη από τους επεξεργαστές συμβάντων
1. Εάν ένας επεξεργαστής συμβάντων ρίξει μια εξαίρεση, άλλοι επεξεργαστές στην αλυσίδα συμβάντων δεν θα κληθούν, αλλά αυτό δεν θα συμβεί με την ξαναγραμμένη εικονική μέθοδο. 2. Η επανεγγραφή είναι πολύ πιο αποτελεσματική από τους επεξεργαστές συσχετιστικών συμβάντων, οι οποίοι πρέπει να επαναληφθούν σε ολόκληρη τη λίστα αιτημάτων, κάτι που απαιτεί περισσότερο χρόνο CPU. 3. Τα συμβάντα μπορούν να απαντηθούν κατά το χρόνο εκτέλεσης, με μεγαλύτερη ευελιξία και πολλαπλές απαντήσεις μπορούν να συσχετιστούν με το ίδιο συμβάν. 4. Ο κοινός κανόνας είναι η αντιμετώπιση ενός παράγωγου γεγονότος και η μέθοδος επανεγγραφής είναι καλύτερη.
36. Δίκαιη χρήση. Διαγνωστικά χρόνου εκτέλεσης .NET
1. Το System.Diagnostics.Debug\Trace\EventLog παρέχει όλα τα εργαλεία που απαιτούνται για το πρόγραμμα για την προσθήκη διαγνωστικών πληροφοριών στο χρόνο εκτέλεσης και η εφαρμογή μπορεί να γράψει στο αρχείο καταγραφής συμβάντων συστήματος όταν το EventLog παρέχει το συστατικό. 2. Τέλος, μην γράφετε τη δική σας διαγνωστική βιβλιοθήκη, το .NET FCL έχει ήδη τη βασική βιβλιοθήκη που χρειαζόμαστε.
37. Χρησιμοποιήστε τυπικούς μηχανισμούς διαμόρφωσης
1、. Η κλάση System.Windows.Application του πλαισίου .NET ορίζει τις ιδιότητες για να δημιουργήσουμε μια κοινή διαδρομή διαμόρφωσης. 2. Τα Application.LocalAppDataPath και Application.userDataPath θα δημιουργήσουν τα ονόματα διαδρομών του τοπικού καταλόγου δεδομένων και των δεδομένων χρήστη. 3. Μην γράφετε δεδομένα σε καταλόγους συστήματος ProgramFiles και Windows, αυτές οι τοποθεσίες απαιτούν υψηλότερα δικαιώματα ασφαλείας, μην περιμένετε από τους χρήστες να έχουν δικαιώματα εγγραφής.
38. Προσαρμόστε και υποστηρίξτε τη δέσμευση δεδομένων
1. Τα δύο αντικείμενα του BindingMananger και του CurrencyManager πραγματοποιούν τη μεταφορά δεδομένων μεταξύ του ελέγχου και της πηγής δεδομένων. 2. Πλεονεκτήματα της δέσμευσης δεδομένων: η χρήση της δέσμευσης δεδομένων είναι πολύ πιο απλή από τη σύνταξη του δικού σας κώδικα. Θα πρέπει να χρησιμοποιείται για πεδία διαφορετικά από στοιχεία δεδομένων κειμένου - μπορούν επίσης να συνδεθούν και άλλες ιδιότητες εμφάνισης. Για συνδέσεις δεδομένων Windowos Forms, η δυνατότητα χειρισμού συγχρονισμού πολλαπλών ελέγχων πηγών δεδομένων που σχετίζονται με έλεγχο. 3. Όταν το αντικείμενο δεν υποστηρίζει τα απαιτούμενα χαρακτηριστικά, μπορείτε να υποστηρίξετε τη δέσμευση δεδομένων αποκλείοντας το τρέχον αντικείμενο και στη συνέχεια προσθέτοντας το επιθυμητό αντικείμενο.
39. Χρήση. Επικύρωση .NET
1. Υπάρχουν πέντε στοιχεία ελέγχου στο ASP.NET για την επαλήθευση της εγκυρότητας και μπορείτε να χρησιμοποιήσετε το CustomValidator για να δημιουργήσετε μια νέα κλάση για να προσθέσετε τον δικό σας έλεγχο ταυτότητας. 2. Η επικύρωση των Windows απαιτεί ένα υποσύστημα.Windows.Forms.Control.Validating για την εγγραφή ενός προγράμματος χειρισμού συμβάντων.
40. Επιλέξτε το κατάλληλο ** ανάλογα με τις ανάγκες
1. Ο πίνακας έχει δύο προφανή ελαττώματα: δεν μπορεί να αλλάξει δυναμικά το μέγεθός του. Η αλλαγή μεγέθους είναι χρονοβόρα. 2. Το ArrayList αναμειγνύει τα χαρακτηριστικά των μονοδιάστατων πινάκων και των συνδεδεμένων λιστών, το Queue και το Stack είναι ειδικοί πίνακες που βασίζονται στο Array. 3. Όταν το πρόγραμμα είναι πιο ευέλικτο στην προσθήκη και διαγραφή στοιχείων, μπορεί να δημιουργήσει πιο ισχυρούς τύπους και όταν δημιουργεί μια κλάση που προσομοιώνει **, θα πρέπει να εφαρμόζει ευρετήρια και διεπαφές με δυνατότητα αρίθμησης IE για αυτό.
41. Το DataSet είναι καλύτερο από την προσαρμοσμένη δομή
1. Τα σύνολα δεδομένων έχουν δύο μειονεκτήματα: η αλληλεπίδραση μεταξύ των συνόλων δεδομένων που χρησιμοποιούν μηχανισμό σειριοποίησης XML και non-.NET κώδικα δεν είναι πολύ καλή. Το DataSet είναι ένα πολύ ευέλικτο κοντέινερ. 2. Οι ισχυροί τύποι συνόλων δεδομένων παραβιάζουν περισσότερους κανόνες σχεδίασης και η αποτελεσματικότητα ανάπτυξής τους είναι πολύ υψηλότερη από αυτή των πιο κομψών σχεδίων που γράφτηκαν από μόνα τους.
42. Χρησιμοποιήστε χαρακτηριστικά για να απλοποιήσετε τον προβληματισμό
Σχεδιάζοντας και εφαρμόζοντας χαρακτηριστικών που αναγκάζουν τους προγραμματιστές να δηλώνουν δυναμικά χρησιμοποιήσιμους τύπους, μεθόδους και χαρακτηριστικά, μπορείτε να μειώσετε τα σφάλματα χρόνου εκτέλεσης εφαρμογών και να βελτιώσετε την ικανοποίηση των χρηστών λογισμικού.
43. Αποφύγετε την υπερβολική χρήση αντανακλαστικών
1. Οι παράμετροι και οι τιμές επιστροφής που χρησιμοποιούνται από τα μέλη του Invoke είναι το System.Object, το οποίο μετατρέπει τύπους κατά το χρόνο εκτέλεσης, αλλά η πιθανότητα προβλημάτων έχει γίνει πιο πιθανή. 2. Η διεπαφή μας επιτρέπει να αποκτήσουμε ένα σαφέστερο και πιο διατηρήσιμο σύστημα και η αντανάκλαση είναι ένας πολύ ισχυρός μηχανισμός καθυστερημένης δέσμευσης. Το πλαίσιο .NET το χρησιμοποιεί για την υλοποίηση δέσμευσης δεδομένων για στοιχεία ελέγχου των Windows και στοιχεία ελέγχου ιστού.
44. Δημιουργήστε συγκεκριμένες κατηγορίες εξαίρεσης για την εφαρμογή
1. Ο μόνος λόγος για τον οποίο χρειάζονται διαφορετικές κατηγορίες εξαιρέσεων είναι για να επιτρέπεται στους χρήστες να ακολουθούν εύκολα διαφορετικές προσεγγίσεις σε διαφορετικά σφάλματα κατά την εγγραφή επεξεργαστών αλιευμάτων. 2. Όταν μπορεί να υπάρχουν διαφορετικές συμπεριφορές επιδιόρθωσης, θα πρέπει να δημιουργήσουμε μια ποικιλία διαφορετικών κλάσεων εξαίρεσης, παρέχοντας όλους τους κατασκευαστές που υποστηρίζονται από τη βασική κλάση εξαίρεσης, μπορούμε να δημιουργήσουμε μια πλήρως λειτουργική κλάση εξαίρεσης για την εφαρμογή και να χρησιμοποιήσουμε το χαρακτηριστικό InnerException για να αποθηκεύσουμε όλες τις πληροφορίες σφάλματος που δημιουργούνται από συνθήκες σφάλματος χαμηλότερου επιπέδου.
45. Δώστε προτεραιότητα στις ασυνήθιστες εγγυήσεις ασφάλειας
1. Η ισχυρή εγγύηση εξαίρεσης παρέχει την καλύτερη ισορροπία μεταξύ της ανάκτησης από την εξαίρεση και του απλοποιημένου χειρισμού εξαιρέσεων και η κατάσταση του προγράμματος παραμένει αμετάβλητη όταν η λειτουργία διακόπτεται λόγω της εξαίρεσης. 2. Κάντε αμυντική αντιγραφή των δεδομένων που πρόκειται να τροποποιηθούν, τροποποιήστε το αμυντικό αντίγραφο αυτών των δεδομένων, η λειτουργία στη μέση μπορεί να προκαλέσει εξαίρεση και το προσωρινό αντίγραφο και το αρχικό αντικείμενο θα αντικατασταθούν. 3. Οι εξολοθρευτές, οι μέθοδοι Dispose() και οι μέθοδοι-στόχοι που συνδέονται με τους αντιπροσώπους θα πρέπει να διασφαλίζουν ότι δεν κάνουν εξαιρέσεις σε καμία περίπτωση.
46. Ελαχιστοποιήστε τη διαλειτουργικότητα
1. Υπάρχουν τρία κόστη διαλειτουργικότητας: το κόστος της απαρίθμησης δεδομένων μεταξύ διαχειριζόμενων και μη διαχειριζόμενων σωρών, το κόστος εναλλαγής μεταξύ διαχειριζόμενου κώδικα και μη διαχειριζόμενου κώδικα και το έργο ανάπτυξης προγραμματιστών που ασχολούνται με υβριδικά περιβάλλοντα. 2. Η χρήση του τύπου blittable στη διαλειτουργικότητα μπορεί να αναπαραχθεί αποτελεσματικά μεταξύ διαχειριζόμενων και μη διαχειριζόμενων περιβαλλόντων χωρίς να επηρεάζεται από την εσωτερική δομή του αντικειμένου. 3. Χρησιμοποιήστε τη δυνατότητα In/Out για να εξασφαλίσετε τις πιο κατάλληλες περιττές πολλαπλές αναπαραγωγές και να βελτιώσετε την απόδοση δηλώνοντας τον τρόπο απαρίθμησης των δεδομένων. 4. Χρησιμοποιήστε το COM Interop για να εφαρμόσετε τη διαλειτουργικότητα με τα στοιχεία COM με τον απλούστερο τρόπο, χρησιμοποιήστε το P/Invoke για να καλέσετε το Win32 API ή χρησιμοποιήστε το διακόπτη /CLR του μεταγλωττιστή C++ για να συνδυάσετε διαχειριζόμενο και μη διαχειριζόμενο κώδικα.
47. Δώστε προτεραιότητα στους κώδικες ασφαλείας
1. Αποφύγετε την πρόσβαση σε μη διαχειριζόμενη μνήμη όσο το δυνατόν περισσότερο και η απομονωμένη αποθήκευση δεν μπορεί να εμποδίσει την πρόσβαση από διαχειριζόμενο κώδικα και αξιόπιστους χρήστες. 2. Όταν τα συγκροτήματα εκτελούνται στον Ιστό, εξετάστε το ενδεχόμενο να χρησιμοποιήσετε απομονωμένο χώρο αποθήκευσης και όταν ορισμένοι αλγόριθμοι απαιτούν υψηλότερα δικαιώματα ασφαλείας, αυτοί οι κωδικοί θα πρέπει να απομονώνονται σε ξεχωριστό συγκρότημα.
48. Κατακτήστε τα σχετικά εργαλεία και πόρους
1. Χρησιμοποιήστε το NUnit για να δημιουργήσετε αυτόματες δοκιμές μονάδας (ενσωματωμένες στο VS2010). 2. Το εργαλείο FXCop θα λάβει τον κωδικό IL στη συναρμολόγηση, θα τον αναλύσει σε σχέση με τους ετερογενείς κανόνες κωδικοποίησης και τις βέλτιστες πρακτικές και, τέλος, θα αναφέρει την παραβίαση. 3. Το ILDasm είναι ένα εργαλείο αποσυναρμολόγησης IL που μπορεί να μας βοηθήσει να αποκτήσουμε πληροφορίες για λεπτομέρειες. 4. Το Shared Source CLI είναι ένας πηγαίος κώδικας υλοποίησης που περιέχει τον πυρήνα του πλαισίου .NET και τον μεταγλωττιστή C#. |