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 internal Visual Basic formátumban vannak megjelölveFriend.

  • Amikor egy osztálykönyvtárat fejleszt, és a könyvtár kiegészítései külön assembly-kben találhatók, de ezek hozzáférést igényelnek a meglévő assembly-k azon tagjaihoz, amelyek C#-ban internal vagy Visual Basic-ben Friend jelöltek.

Megjegyzések

Az InternalsVisibleToAttribute attribútum segítségével azonosíthat egy vagy több barát-összeállítást egy adott összeállításhoz. Az alábbi példa a InternalsVisibleToAttributeAssemblyA 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 Assembly A-ban található összes olyan típushoz és taghoz, amelyeket C#-ban internal, vagy Visual Basic-ban Friend jelöl.

Megjegyzé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 az összetevőnek a nevét, amelyet készít, amikor a külső hivatkozásokhoz való kötés történik. 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 az explicit módon barátként megadott szerelvények férhetnek hozzá internal (C#) illetve Friend (Visual Basic) típusokhoz és tagokhoz. Ha például a AssemblyB az A szerelvény barátja, és a C szerelvénya AssemblyB-ra hivatkozik, a C szerelvény nem rendelkezik hozzáféréssel az internal (C#) vagy Friend (Visual Basic) típusaihoz .

A fordító elvégzi az attribútum InternalsVisibleToAttribute számára á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 a Assembly A strong name-mel rendelkezik, a AssemblyB-nek is strong name-mel kell rendelkeznie. 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át-assembly neve nem lehet a AssemblyB erős neve. Ne tartalmazza az összeállítás verzióját, a kultúrát, az architektúrát vagy a nyilvános kulcs tokenjé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 fordító beállítással meg kell adnia a /keyfile erős névkulcsát. További információért lásd: Aláírt barátösszeállítások 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át-összeállítás az egész összeállításra vonatkozik.

  • Ha az Assembly A-ban több száz típust szeretne megosztani a AssemblyB-vel, mindegyikhez hozzá kell adnia StrongNameIdentityPermission. 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. Ha ismerős szerelvényt használ, a megosztott típusok C# esetén internal vagy Visual Basic esetén Friend néven vannak deklarálva.

Az információkért, hogy hogyan érhetjük el egy szerelvény internal (C#) vagy Friend (Visual Basic) típusait és metódusait egy modulfájlból (amely .netmodule kiterjesztésű), nézze meg a ModuleAssemblyName (C#) vagy -moduleassemblyname (Visual Basic) témakört.

Lásd még