Introduksjon til Youyuan-forsamlingen Vi vet at medlemmer av en klasse som er definert som interne (inkludert typer, metoder, egenskaper, variabler, hendelser) kun kan nås i samme samling (selvfølgelig snakker jeg om den vanlige måten her, uten tilgang via refleksjon). Denne regelen er i . .NET 2.0 er litt ødelagt, noe som lar oss sette interne medlemmer i en assembly slik at spesifikke medlemmer kan få tilgang til. Vi kaller sammensetningen som inneholder disse interne medlemmene kilde-samlingen, og samlingssettet kalles venn-samlingen.
Bruk av vennemonteringer Dette attributtet brukes på assemblernivå.
På denne måten, etter at FriendAssembly-programmet refererer til assemblyen, kan det få tilgang til den interne Name-egenskapen. Generelt sett er denne assembly:InternalsVisibleTo("FriendAssembly") bedre plassert i AssemblyInfo.cs, tross alt er den på assembly-nivå.
Når skal man bruke InternalsToVisibleTo Faktisk brukes ikke denne attributten i generelle applikasjoner, og vi bør ikke misbruke den. For generelt trenger ikke en godt designet samling å være åpen mot omverdenen. Men enhetstestingsscenarier kan dra nytte av denne funksjonen. Med denne funksjonen kan vi spesifisere at koden for enhetstester har tilgang til disse interne medlemmene slik at vi kan enhetsteste disse medlemmene. Dette krever imidlertid at navnet på friend-assemblyen skrives dødt i kildeassemblyen, noe som skaper noen sikkerhetsproblemer. Sikkerhet kan garanteres ved å introdusere signatursamlinger.
InternalsToVisibleTo og signatursamlingen Du kan direkte spesifisere navnet og den offentlige nøkkelen til vennens meta-assembly til InternalsVisibleTo. Bruk VS-utviklerkommandolinjen for å generere den offentlige nøkkelen for FriendAssembly:
Spesifiser navnet på vennesamlingen og den offentlige nøkkelen til kildesamlingen:
Faktisk, siden friend-assemblyen refererer til kildeassemblyen, og den signerte assemblyen refererer til en usignert assembly, og den signerte assemblyen ikke kan spesifisere en usignert friend-assembly, er noen av dem signert, og da må de signeres.
|