Wprowadzenie do Zgromadzenia Youyuan Wiemy, że członkowie klasy zdefiniowani jako wewnętrzni (w tym typy, metody, właściwości, zmienne, zdarzenia) mogą być dostępni tylko w tym samym asemblerze (oczywiście mówię tu o normalnym sposobie, nie licząc dostępu przez odbicie). Ta reguła znajduje się w . .NET 2.0 jest nieco uszkodzony, pozwalając ustawić dostęp do wewnętrznych członków asemblera, do których mają dostęp konkretni członkowie. Nazywamy asemble, które zawiera te wewnętrzne członki, asemblem źródłowym, a zestaw asemblerów nazywamy asemblerem przyjacielskim.
Zastosowanie w zgromadzeniu przyjacielskim Ten atrybut jest używany na poziomie asembleru.
Dzięki temu, po odwołaniu się do asemblera, program FriendAssembly może uzyskać dostęp do wewnętrznej właściwości Name. Ogólnie rzecz biorąc, ten assembly:InternalsVisibleTo("FriendAssembly") lepiej umieścić w AssemblyInfo.cs, bo jest na poziomie assembly.
Kiedy używać InternalsToVisibleTo W rzeczywistości ten atrybut nie jest używany w ogólnych zastosowaniach i nie powinniśmy go nadużywać. Bo generalnie dobrze zaprojektowany zespół nie musi być otwarty na świat zewnętrzny. Jednak scenariusze testów jednostkowych mogą wykorzystać tę funkcję. Dzięki tej funkcji możemy określić, że kod testów jednostkowych ma dostęp do tych wewnętrznych członków, abyśmy mogli je testować. Jednak wymaga to wpisania nazwy friend-assembly martwej w asemblerze źródłowym, co powoduje pewne problemy z bezpieczeństwem. Bezpieczeństwo można zagwarantować poprzez wprowadzenie składów podpisów.
InternalsToVisibleTo i zespół sygnatury Możesz bezpośrednio określić nazwę i klucz publiczny friend meta assembly do InternalsVisibleTo. Użyj wiersza poleceń dewelopera VS, aby wygenerować klucz publiczny dla FriendAssembly:
Określ nazwę sojuszniczego asembla oraz klucz publiczny do asemblera źródłowego:
W rzeczywistości, ponieważ friend assembly odnosi się do zespołu źródłowego, a podpisany odwołuje się do niepodpisanego assembly, a podpisany nie może określać niesigned friend assembly, to każde z nich jest podpisane, a następnie musi być podpisane.
|