Introduktion til Youyuan-forsamlingen Vi ved, at medlemmer af en klasse, der er defineret som interne (inklusive typer, metoder, egenskaber, variable, begivenheder), kun kan tilgås i samme assembly (selvfølgelig taler jeg om den normale måde her, uden adgang via refleksion). Denne regel er i . .NET 2.0 er en smule ødelagt, hvilket gør det muligt for os at sætte en assemblys interne medlemmer til at blive tilgået af specifikke medlemmer. Vi kalder samlingen, der indeholder disse interne medlemmer, kildesamlingen, og samlingssættet kaldes friend-samlingen.
Brug af ven samling Denne attribut bruges på samlingsniveau.
På denne måde kan FriendAssembly-programmet, efter at have refereret til assemblyen, få adgang til den interne Name-egenskab. Generelt set er denne assembly:InternalsVisibleTo("FriendAssembly") bedre placeret i AssemblyInfo.cs, for den er trods alt på assembly-niveau.
Hvornår skal man bruge InternalsToVisibleTo Faktisk bruges denne attribut ikke i generelle anvendelser, og vi bør ikke misbruge den. For generelt behøver en veludformet samling ikke at være åben mod omverdenen. Men enhedstestscenarier kan udnytte denne funktion. Med denne funktion kan vi specificere, at koden til enhedstests har adgang til disse interne medlemmer, så vi kan unitteste dem. Dette kræver dog, at navnet på vennesamlingen står dødt i kildesamlingen, hvilket skaber nogle sikkerhedsproblemer. Sikkerhed kan garanteres ved at indføre signatursamlinger.
InternalsToVisibleTo og signatursamlingen Du kan direkte angive navnet og den offentlige nøgle for vennemeta-assemblyen til InternalsVisibleTo. Brug VS-udviklerkommandolinjen til at generere den offentlige nøgle til FriendAssembly:
Angiv navnet på vennesamlingen og den offentlige nøgle til kildesamlingen:
Faktisk, da friend assembly refererer til kildeassemblyen, og den signerede assembly refererer til en usigneret assembly, og den signerede assembly ikke kan specificere en usigneret friend assembly, er nogen af dem signeret, så de skal underskrives.
|