C#:n sisäinen avainsana voi tehdä merkityistä metodeista, kentistä tai attribuutista saataville vain nykyisessä kokoonpanossa, joten entä jos muut assemblyt tarvitsevat tätä sisäistä menetelmää? .NET tarjoaa tavan suorittaa tämä toiminto samankaltaisesti kuin C++:n ystäväluokka, eli käyttää InternalsVisibleTo:ta.
Tämä on yleistä testeissä, ja tarvitaan toinen projekti testaamaan sisäisen metodin merkitsemää toiminnallisuutta, joten InternalsVisibleTo:ssa meidän ei tarvitse muuttaa metodia, joka ei pitäisi olla julkinen yksikkötestauksen tekemiseen.
InternalsVisibleTo:ta käytettäessä on vielä joitakin asioita, joihin kannattaa kiinnittää huomiota, erityisesti PublicKey ei ole helppo ymmärtää, joten puhutaanpa siitä, miten tätä InternalsVisibleTo:ta käytetään:
Selitetäänpä ensin lähtökohta: Project1 on toiminnallinen projekti, ja Project1.Test (assemblyn nimi: Project1.Test.dll) on testiprojekti Project1:lle.
1. Avaa Project1:n Assembly.cs-tiedosto ja lisää tämä lause tiedoston loppuun:
PublicKey=****** tulisi korvata Project1.Test.dll julkisella avaimella, ja PublicKeyn saamisesta katso artikkelin lopun Muistiinpano-osio.
2. Varmista, että nimiavaruus: System.Runtime.CompilerServices lisätään Assembly.cs:n nimiavaruusviittaukseen, sillä InternalsVisibleTo sijaitsee nimiavaruudessa System.Runtime.CompilerService.
Notes:
1. Miten saan julkisen avaimen?
V: Komentorivin alla käytä sn -tp Project1.Test.dll nähdäksesi PublicKeyn ja PublicKeyTokenin
2. Jos Project1 on vahvasti nimetty projekti, InternalsVisibleTo:n täytyy määrittää PublicKey, joten Project1.Testin on myös käytettävä vahvaa allekirjoitusta InternalsVisibleTo:n oikeaan käyttöön, muuten käännös tekee virheen, jos Project1 ei käytä vahvaa allekirjoitusta, Tällöin Project1.Testin ei tarvitse käyttää vahvoja allekirjoituksia, ja InternalsVisibleTo:ta käytettäessä vaaditaan vain kokoonpanon nimi, eikä PuklicKeytä tarvitse asettaa. |