Udostępnij za pośrednictwem


Zespoły Friend (C# i Visual Basic)

A zestawu friend jest to zespół, który można uzyskać dostęp do innego zestawu przyjaciel (Visual Basic) lub wewnętrzny (C#) typów i członków.Po zidentyfikowaniu zestawu jako zestawu friend, nie masz już do oznaczania typów i członków jako publiczne w celu dostępu do niego przez inne zespoły.Jest to szczególnie wygodne w następujących scenariuszach:

  • Podczas testowania jednostek, podczas wykonywania kodu testu montażu oddzielnych ale wymaga dostępu do członków Zgromadzenia, testowanego są oznaczone jako Friend (Visual Basic) lub internal (C#).

  • Podczas opracowywania Biblioteka klas i są zawarte w oddzielnych zespołów do biblioteki, ale wymagają dostępu do elementów członkowskich w istniejących zestawów, które są oznaczone jako Friend (Visual Basic) lub internal (C#).

Uwagi

Można użyć InternalsVisibleToAttribute atrybut do identyfikowania jeden lub więcej zestawów przyjaciel dla danego zestawu.W poniższym przykładzie użyto InternalsVisibleToAttribute atrybutu w zestawie a i określa Zgromadzenie AssemblyB jako zestawu friend.Daje to zestaw AssemblyB dostęp do wszystkich typów i członków Zgromadzenia, które są oznaczone jako Friend (Visual Basic) lub internal (C#).

[!UWAGA]

Podczas kompilowania zestawu (Zgromadzenia AssemblyB) będzie uzyskiwać dostęp typu wewnętrznego lub wewnętrznego członków innego zestawu (Zgromadzenia a), należy jawnie określić nazwę pliku wyjściowego (.exe lub .dll) za pomocą /out opcję kompilatora.Jest to wymagane, ponieważ kompilator jeszcze nie wygenerował nazwę zestawu, który buduje się w chwili wiązanie odwołań zewnętrznych.Aby uzyskać więcej informacji, zobacz /out (C#) i / out (Visual Basic).

Imports System.Runtime.CompilerServices
Imports System
<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
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");
    }

}

Tylko zestawy, które jawnie określić jak przyjaciółmi można uzyskać dostęp Friend (Visual Basic) lub internal (C#) typów i członków.Na przykład, jeśli zestaw b jest przyjaciel Zgromadzenia i montażu c odwołania zestawu B, C nie mają dostępu do Friend (Visual Basic) lub internal (C#) typów w A.

Kompilator wykonuje niektóre podstawowe poprawności nazwy zestawu friend, przekazany do InternalsVisibleToAttribute atrybut.Jeżeli Zgromadzenie a deklaruje b jako zestawu friend, reguł sprawdzania poprawności są w następujący sposób:

  • Jeżeli Zgromadzenie a jest silna, o nazwie zestawu b musi również być silnej nazwy.Nazwa zestawu friend, przekazywane do atrybutu musi składać się z nazwy zestawu i klucz publiczny klucz silnej nazwy, który jest używany do podpisywania zestawu b.

    Nazwa zestawu friend, przekazywane do InternalsVisibleToAttribute atrybutu nie może być silnej nazwy zestawu b: nie zawierają wersji zestawu, kultury, architektura lub token klucza publicznego.

  • Jeżeli Zgromadzenie a nie jest silne o nazwie, nazwa zestawu friend powinien składać się tylko nazwę zestawu.Aby uzyskać więcej informacji, zobacz Jak: tworzenie niepodpisanych zestawów Friend (C# i Visual Basic).

  • Jeżeli Zgromadzenie b jest silne o nazwie, musisz określić klucz silnej nazwy zestawu b za pomocą ustawienia projektu lub wiersza polecenia /keyfile opcję kompilatora.Aby uzyskać więcej informacji, zobacz Jak: tworzenie zestawów przyjaciel podpisane (C# i Visual Basic).

StrongNameIdentityPermission Klasy zapewnia także możliwość typów, należy udostępnić następujące różnice:

  • StrongNameIdentityPermissionstosuje się do poszczególnych typów podczas zestawu friend stosuje się do całego zestawu.

  • Jeśli są setki typów w zestawie a , który chcesz udostępnić z zestawu b, należy dodać StrongNameIdentityPermission do nich wszystkich.Jeśli korzystasz z zestawu friend, wystarczy raz zadeklarować relacji przyjaciela.

  • Jeśli korzystasz z StrongNameIdentityPermission, typy, który chcesz udostępnić musi być zadeklarowana jako publicznych.Jeśli korzystasz z zestawu friend, typy udostępnionego są deklarowane jako Friend (Visual Basic) lub internal (C#).

Aby uzyskać informacje dotyczące dostępu do zestawu Friend (Visual Basic) lub internal (C#) typów i metod z pliku modułu (plik z.rozszerzenie netmodule), zobacz /moduleassemblyname (Visual Basic) i /moduleassemblyname (C#).

Zobacz też

Zadania

Jak: tworzenie niepodpisanych zestawów Friend (C# i Visual Basic)

Jak: tworzenie zestawów przyjaciel podpisane (C# i Visual Basic)

Informacje

InternalsVisibleToAttribute

StrongNameIdentityPermission

Koncepcje

Zespoły i pamięci podręcznej zestawów globalnych (C# i Visual Basic)

Podręcznik programowania C#

Inne zasoby

Podręcznik programowania Visual Basic