Η εσωτερική λέξη-κλειδί στη C# μπορεί να κάνει τις επισημασμένες μεθόδους, πεδία ή χαρακτηριστικά διαθέσιμα μόνο εντός της τρέχουσας διάταξης, οπότε τι γίνεται αν άλλα συγκροτήματα χρειαστεί να χρησιμοποιήσουν αυτήν την εσωτερική μέθοδο; Το .NET παρέχει έναν τρόπο για την επίτευξη αυτής της λειτουργίας παρόμοια με την κλάση friend στη C++, η οποία είναι η χρήση του InternalsVisibleTo.
Αυτό είναι σύνηθες όταν κάνετε δοκιμές και απαιτείται ένα άλλο έργο για τη δοκιμή της λειτουργικότητας που επισημαίνεται από την εσωτερική μέθοδο στο έργο, επομένως με το InternalsVisibleTo, δεν χρειάζεται να αλλάξουμε μια μέθοδο που δεν πρέπει να είναι δημόσια σε δημόσια για να κάνουμε δοκιμές μονάδας.
Υπάρχουν ακόμα ορισμένα πράγματα που πρέπει να προσέξετε όταν χρησιμοποιείτε το InternalsVisibleTo, ειδικά το PublicKey δεν είναι εύκολο να κατανοηθεί, ας μιλήσουμε για τον τρόπο χρήσης αυτού του InternalsVisibleTo:
Ας εξηγήσουμε πρώτα την υπόθεση: Το Project1 είναι ένα λειτουργικό έργο και το Project1.Test (όνομα συναρμολόγησης: Project1.Test.dll) είναι ένα δοκιμαστικό έργο για το Project1.
1. Ανοίξτε το αρχείο Assembly.cs του Project1 και προσθέστε αυτήν την πρόταση στο τέλος του αρχείου:
PublicKey=****** θα πρέπει να αντικατασταθεί με το Project1.Test.dll δημόσιο κλειδί, όσο για το πώς να αποκτήσετε το PublicKey, ανατρέξτε στην ενότητα Σημειώσεις στο τέλος του άρθρου.
2. Βεβαιωθείτε ότι ο χώρος ονομάτων: System.Runtime.CompilerServices προστίθεται στην αναφορά χώρου ονομάτων του Assembly.cs, καθώς το InternalsVisibleTo βρίσκεται στον χώρο ονομάτων System.Runtime.CompilerService.
Notes:
1. Πώς μπορώ να αποκτήσω ένα δημόσιο κλειδί;
Α: Κάτω από τη γραμμή εντολών, χρησιμοποιήστε το sn -tp Project1.Test.dll για να δείτε το PublicKey και το PublicKeyToken
2. Εάν το Project1 είναι ένα έργο με ισχυρό όνομα, τότε το InternalsVisibleTo πρέπει να καθορίσει ένα PublicKey, επομένως το Project1.Test πρέπει επίσης να χρησιμοποιήσει μια ισχυρή υπογραφή για να χρησιμοποιήσει σωστά το InternalsVisibleTo, διαφορετικά η μεταγλώττιση θα κάνει σφάλμα, εάν το Project1 δεν χρησιμοποιεί ισχυρή υπογραφή, Στη συνέχεια, το Project1.Test δεν χρειάζεται να χρησιμοποιεί ισχυρές υπογραφές και όταν χρησιμοποιείτε το InternalsVisibleTo, απαιτείται μόνο το όνομα της συγκρότησης και δεν χρειάζεται να ορίσετε το PuklicKey. |