Bevezetés a Youyuan Gyűléshez Tudjuk, hogy egy osztály belső tagjai (beleértve a típusokat, metóduszokat, tulajdonságokat, változókat, eseményeket) csak ugyanabban a assembly egységben érhetők el (természetesen itt a normál módról beszélek, nem a reflektív hozzáférésről). Ez a szabály benne van. A .NET 2.0 kissé hibás, így egy assembly belső tagjait bizonyos tagok számára elérhetjük. Az ilyen belső tagokat tartalmazó assembly assembly forrásösszeállításnak nevezzük, és az assembly halmazt a friend assembly néven ismert.
Baráti összeszerelés használata Ezt az attribútumot az assembly szinten használják.
Így, miután a FriendAssembly program hivatkozik az assembly oldalára, hozzáférhet a belső Név tulajdonsághoz. Általánosságban ez a assembly:InternalsVisibleTo ("FriendAssembly") jobban a AssemblyInfo.cs-be helyezkedik el, hiszen az assembly szintjén van.
Mikor kell használni a InternalsToVisibleTo rendszert Valójában ezt az attribútumot általános alkalmazásokban nem használják, és nem szabad visszaélnünk vele. Mert általánosságban elmondható, hogy egy jól megtervezett gyűlés nem kell, hogy nyitott legyen a külvilág számára. De az egységtesztelés kihasználhatja ezt a funkciót. Ezzel a funkcióval megadhatjuk, hogy az egységtesztek kódja hozzáférjen ezekhez a belső tagokhoz, így egységtesztet tudunk végezni. Ehhez azonban a barát assembly nevének halottak be kell írnia a forrás összeállításban, ami biztonsági problémákat okoz. A biztonság garantálható aláírási összeállítások bevezetésével.
InternalsToVisibleTo és az aláírás összeállítása Közvetlenül megadhatod a barát meta assembly nevét és nyilvános kulcsát az InternalsVisibleTo címre. Használd a VS fejlesztő parancssorát a FriendAssembly nyilvános kulcsának generálásához:
Megadjuk a barát assembly nevét és a forrás assembly nyilvános kulcsát:
Valójában, mivel a barát assembly a forrás assembly hivatkozik, az aláírt assembly pedig egy aláíratlan assembly esetén, és az aláírt assembly nem tud jelölni egy nem aláírt barát assemblyt, bármelyik aláírt, akkor alá kell írni.
|