Det interne nøkkelordet i C# kan gjøre at de markerte metodene, feltene eller attributtene kun er tilgjengelige innenfor den nåværende assemblyen, så hva om andre assemblies må bruke denne interne metoden? .NET gir en måte å utføre denne funksjonen på lik friend-klassen i C++, nemlig å bruke InternalsVisibleTo.
Dette er vanlig når man gjør tester, og et annet prosjekt trengs for å teste funksjonaliteten markert av den interne metoden i prosjektet, så med InternalsVisibleTo trenger vi ikke å endre en metode som ikke skal være offentlig til offentlig for å kunne utføre enhetstesting.
Det er fortsatt noen ting å være oppmerksom på når man bruker InternalsVisibleTo, spesielt PublicKey er ikke lett å forstå, la oss snakke om hvordan du bruker denne InternalsVisibleTo:
La oss først forklare premisset: Project1 er et funksjonelt prosjekt, og Project1.Test (assemblernavn: Project1.Test.dll) er et testprosjekt for Project1.
1. Åpne Assembly.cs-filen til Project1 og legg til denne setningen på slutten av filen:
PublicKey=****** bør erstattes med den Project1.Test.dll offentlige nøkkelen, for hvordan du får PublicKey, se Notat-seksjonen på slutten av artikkelen.
2. Verifiser at navnerommet: System.Runtime.CompilerServices legges til navnerommets referanse til Assembly.cs, siden InternalsVisibleTo ligger i navnerommet System.Runtime.CompilerService.
Notes:
1. Hvordan får jeg en PublicKey?
Svar: Under kommandolinjen, bruk sn -tp Project1.Test.dll for å se PublicKey og PublicKeyToken
2. Hvis Project1 er et sterkt navngitt prosjekt, må InternalsVisibleTo spesifisere en PublicKey, så Project1.Test må også bruke en sterk signatur for å bruke InternalsVisibleTo korrekt, ellers vil kompileringen gjøre en feil hvis Project1 ikke bruker en sterk signatur, Da trenger ikke Project1.Test å bruke sterke signaturer, og når man bruker InternalsVisibleTo, kreves kun navnet på samlingen, og det er ikke nødvendig å sette PuklicKey. |