Inleiding tot de Youyuan Vergadering We weten dat leden van een klasse die als intern worden gedefinieerd (inclusief types, methoden, eigenschappen, variabelen, gebeurtenissen) alleen in dezelfde assembly toegankelijk zijn (natuurlijk heb ik het hier over de normale manier, exclusief toegang via reflectie). Deze regel zit in . .NET 2.0 is enigszins gebroken, waardoor we de interne leden van een assembly kunnen instellen zodat ze door specifieke leden toegankelijk zijn. We noemen de assembly die deze interne leden bevat de bronassembly, en de assemblyset wordt de friend assembly genoemd.
Gebruik van vriendenassemblage Dit attribuut wordt op assemblageniveau gebruikt.
Op deze manier kan het FriendAssembly-programma, nadat het naar de assembly verwijst, toegang krijgen tot de interne eigenschap Name. Over het algemeen is deze assembly:InternalsVisibleTo ("FriendAssembly") beter geplaatst in de AssemblyInfo.cs, want het is immers op assembly-niveau.
Wanneer te gebruiken InternalsToVisibleTo In feite wordt deze attribuut niet gebruikt in algemene toepassingen, en we moeten deze attribuut niet misbruiken. Want over het algemeen hoeft een goed ontworpen assemblage niet open te staan voor de buitenwereld. Maar unittestscenario's kunnen van deze functie profiteren. Met deze functie kunnen we specificeren dat de code voor unittests toegang heeft tot die interne leden, zodat we die leden kunnen unittesten. Dit vereist echter dat de naam van de vriend-assembly dood in de bron-assembly wordt geschreven, wat enkele beveiligingsproblemen veroorzaakt. Beveiliging kan worden gegarandeerd door het introduceren van handtekeningassemblages.
InternalsToVisibleTo en de handtekeningassemblage Je kunt direct de naam en publieke sleutel van de friend meta-assembly specificeren in InternalsVisibleTo. Gebruik de VS-ontwikkelaarscommandoregel om de publieke sleutel voor FriendAssembly te genereren:
Specificeer de naam van de vriend-assembly en de publieke sleutel van de bron-assembly:
Aangezien de friend assembly de bronassembly verwijst, en de signed assembly een niet-signed assembly verwijst, en de signed assembly geen unsigned friend assembly kan specificeren, zijn ze allemaal ondertekend, en moeten ze dan ondertekend worden.
|