Introduktion till Youyuan-församlingen Vi vet att medlemmar av en klass som definieras som interna (inklusive typer, metoder, egenskaper, variabler, händelser) endast kan nås i samma assembly (jag syftar förstås på det normala sättet här, utan åtkomst via reflektion). Denna regel finns i . .NET 2.0 är något trasigt, vilket gör att vi kan ställa in en assemblers interna medlemmar så att specifika medlemmar kan nå. Vi kallar sammansättningen som innehåller dessa interna medlemmar källsammansättningen, och sammansättningsmängden kallas vänsammansättningen.
Användning av vänmontering Denna attribut används på monteringsnivå.
På så sätt kan FriendAssembly-programmet efter att ha refererat assembleren komma åt den interna egenskapen Name. Generellt sett är denna assembly:InternalsVisibleTo("FriendAssembly") bättre placerad i AssemblyInfo.cs, den är ju på monteringsnivå.
När ska man använda InternalsToVisibleTo Faktum är att denna attribut inte används i allmänna tillämpningar, och vi bör inte missbruka detta attribut. För generellt behöver en väl utformad samling inte vara öppen mot omvärlden. Men enhetstestningsscenarier kan dra nytta av denna funktion. Med denna funktion kan vi specificera att koden för enhetstester har tillgång till dessa interna medlemmar så att vi kan enhetstesta dessa medlemmar. Detta kräver dock att namnet på vän-assembleren skrivs död i käll-assembleren, vilket orsakar vissa säkerhetsproblem. Säkerhet kan garanteras genom att införa signatursammansättningar.
InternalsToVisibleTo och signaturmonteringen Du kan direkt ange namnet och den publika nyckeln för vän-meta-assemblern till InternalsVisibleTo. Använd VS-utvecklarkommandoraden för att generera den publika nyckeln för FriendAssembly:
Ange namnet på vän-assemblyn och den publika nyckeln till källassemblyn:
Faktum är att eftersom vän-assembleren refererar till käll-assembleren, och den signerade assembleren refererar till en osignerad assembly, och den signerade assembleren inte kan specificera en osignerad vän-assembly, är någon av dem signerade, då måste de signeras.
|