Megosztás a következőn keresztül:


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ölt internal 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álva internal 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

Lásd még