Baráti összejövetelek
Az ismerős szerelvény olyan szerelvény, amely hozzáférhet egy másik szerelvény belső (C#) vagy Barát (Visual Basic) típusaihoz és tagjaihoz. Ha szerelvényattribútumot ad hozzá a AssemblyA-hoz, hogy ismerős szerelvényként azonosíthassa a AssemblyB-t, többé nem kell nyilvánosként megjelölnie a AssemblyA típusait és tagjait ahhoz, hogy a AssemblyB hozzáférhessen hozzájuk. Ez különösen kényelmes a következő helyzetekben:
Az egységtesztelés során, amikor a tesztkód külön szerelvényben fut, de hozzáférést igényel a tesztelt szerelvény azon tagjaihoz, amelyek C# vagy
Friend
Visual Basic formátumban vannak megjelölveinternal
.Osztálytár fejlesztésekor a kódtár kiegészítései külön szerelvényekben találhatók, de hozzáférést igényelnek a meglévő, C# vagy
Friend
Visual Basic formátumban megjelöltinternal
szerelvények tagjaihoz.
Megjegyzések
Az InternalsVisibleToAttribute attribútum segítségével azonosíthat egy vagy több barátszerelvényt egy adott szerelvényhez. Az alábbi példa a InternalsVisibleToAttribute AssemblyA attribútumát használja, és a assembly AssemblyB-t adja meg barát-szerelvényként. Ez hozzáférést biztosít a AssemblyB-nek az A szerelvényben lévő összes olyan típushoz és taghoz, amely C# vagy Friend
Visual Basic jelöléssel rendelkezikinternal
.
Feljegyzés
Amikor olyan szerelvényt állít össze, mint a AssemblyB, amely egy másik szerelvény belső típusaihoz vagy belső tagjaihoz, például a AssemblyA-hoz fog hozzáférni, a kimeneti fájl nevét (.exe vagy .dll) a -out fordítóbeállítással kell megadnia. Erre azért van szükség, mert a fordító még nem hozta létre annak a szerelvénynek a nevét, amelyet a külső hivatkozásokhoz való kötéskor készít. További információ: OutputAssembly (C#) vagy -out (Visual Basic).
using System.Runtime.CompilerServices;
using System;
[assembly: InternalsVisibleTo("AssemblyB")]
// The class is internal by default.
class FriendClass
{
public void Test()
{
Console.WriteLine("Sample Class");
}
}
// Public class that has an internal method.
public class ClassWithFriendMethod
{
internal void Test()
{
Console.WriteLine("Sample Method");
}
}
Imports System.Runtime.CompilerServices
<Assembly: InternalsVisibleTo("AssemblyB")>
' Friend class.
Friend Class FriendClass
Public Sub Test()
Console.WriteLine("Sample Class")
End Sub
End Class
' Public class with a Friend method.
Public Class ClassWithFriendMethod
Friend Sub Test()
Console.WriteLine("Sample Method")
End Sub
End Class
Csak a barátokként explicit módon megadott szerelvények férhetnek hozzá internal
a (C#) vagy Friend
a (Visual Basic) típusokhoz és tagokhoz. Ha például a AssemblyB az A szerelvény barátja, és a C szerelvény a AssemblyB-ra hivatkozik, a C szerelvény nem rendelkezik hozzáféréssel az A szerelvény (C#) vagy Friend
(Visual Basic) típusaihoz internal
.
A fordító elvégzi az attribútumnak InternalsVisibleToAttribute átadott barátszerelvény nevének alapvető ellenőrzését. Ha az A szerelvény a AssemblyB-t baráti szerelvényként deklarálja, az érvényesítési szabályok a következők:
Ha az A szerelvény neve erős, akkor a AssemblyB-nek is erősnek kell lennie. Az attribútumnak átadott barát-szerelvénynévnek tartalmaznia kell a szerelvény nevét és a AssemblyB aláírásához használt erős névkulcs nyilvános kulcsát.
Az attribútumnak InternalsVisibleToAttribute átadott barátszerelvény neve nem lehet a AssemblyB erős neve. Ne tartalmazza a szerelvény verzióját, a kultúrát, az architektúrát vagy a nyilvános kulcs jogkivonatát.
Ha az A szerelvény neve nem erős, a barát szerelvény nevének csak a szerelvény nevét kell tartalmaznia. További információ : Útmutató: Aláíratlan ismerősi szerelvények létrehozása.
Ha a AssemblyB neve erős, a projektbeállítással vagy a parancssori
/keyfile
fordító beállítással meg kell adnia a AssemblyB erős névkulcsát. További információkért lásd : Aláírt ismerősi szerelvények létrehozása.
Az StrongNameIdentityPermission osztály a következő különbségekkel is lehetővé teszi a típusok megosztását:
StrongNameIdentityPermission egyéni típusra vonatkozik, míg egy barátszerelvény az egész szerelvényre vonatkozik.
Ha az A szerelvényben több száz típust szeretne megosztani a AssemblyB-vel, mindegyikhez hozzá kell adniaStrongNameIdentityPermission. Ha barátösszeállítást használ, csak egyszer kell deklarálnia a barátkapcsolatot.
Ha használja StrongNameIdentityPermission, a megosztani kívánt típusokat nyilvánosként kell deklarálni. Ismerős szerelvény használata esetén a megosztott típusok (C#) vagy
Friend
(Visual Basic) deklarálvainternal
lesznek.
A szerelvény (C#) vagy a (Visual Basic) típusainak internal
és metódusainak modulfájlból (.netmodule kiterjesztésű fájlból) való eléréséről a ModuleAssemblyName (C#) vagy a -moduleassemblyname (Visual Basic) című témakörben olvashat.Friend