InternalsVisibleToAttribute Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Megadja, hogy a csak az aktuális szerelvényen belül általában látható típusok láthatók legyenek egy adott szerelvényben.
public ref class InternalsVisibleToAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly, AllowMultiple=true, Inherited=false)]
public sealed class InternalsVisibleToAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Assembly, AllowMultiple=true, Inherited=false)>]
type InternalsVisibleToAttribute = class
inherit Attribute
Public NotInheritable Class InternalsVisibleToAttribute
Inherits Attribute
- Öröklődés
- Attribútumok
Példák
Aláírt szerelvények
Az alábbi példa az InternalsVisibleToAttribute attribútum használatával teszi láthatóvá egy internal aláírt szerelvényben elnevezett AppendDirectorySeparator metódust egy másik aláírt szerelvény számára. Belső metódust tartalmazó osztályt FileUtilitiesAppendDirectorySeparator definiál. Az InternalsVisibleToAttribute attribútum az osztályt tartalmazó FileUtilities szerelvényre lesz alkalmazva. Az attribútum lehetővé teszi, hogy egy elnevezett Friend1 szerelvény hozzáférjen ehhez a belső taghoz.
//
// The source code should be saved in a file named Example1.cs. It
// can be compiled at the command line as follows:
//
// csc /t:library /keyfile:<snkfilename> Assembly1.cs
//
// The public key of the Friend1 file should be changed to the full
// public key stored in your strong-named key file.
//
using System;
using System.IO;
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("Friend1, PublicKey=002400000480000094" +
"0000000602000000240000525341310004000" +
"001000100bf8c25fcd44838d87e245ab35bf7" +
"3ba2615707feea295709559b3de903fb95a93" +
"3d2729967c3184a97d7b84c7547cd87e435b5" +
"6bdf8621bcb62b59c00c88bd83aa62c4fcdd4" +
"712da72eec2533dc00f8529c3a0bbb4103282" +
"f0d894d5f34e9f0103c473dce9f4b457a5dee" +
"fd8f920d8681ed6dfcb0a81e96bd9b176525a" +
"26e0b3")]
public class FileUtilities
{
internal static string AppendDirectorySeparator(string dir)
{
if (!dir.Trim().EndsWith(Path.DirectorySeparatorChar.ToString()))
return dir.Trim() + Path.DirectorySeparatorChar;
else
return dir;
}
}
'
' The source code should be saved in a file named Example1.cs. It
' can be compiled at the command line as follows:
'
' vbc Assembly1.vb /t:library /keyfile:<snkfilename>
'
' The public key of the Friend1 file should be changed to the full
' public key stored in your strong-named key file.
'
Imports System.IO
Imports System.Runtime.CompilerServices
<Assembly:InternalsVisibleTo("Friend1, PublicKey=002400000480000094" + _
"0000000602000000240000525341310004000" + _
"001000100bf8c25fcd44838d87e245ab35bf7" + _
"3ba2615707feea295709559b3de903fb95a93" + _
"3d2729967c3184a97d7b84c7547cd87e435b5" + _
"6bdf8621bcb62b59c00c88bd83aa62c4fcdd4" + _
"712da72eec2533dc00f8529c3a0bbb4103282" + _
"f0d894d5f34e9f0103c473dce9f4b457a5dee" + _
"fd8f920d8681ed6dfcb0a81e96bd9b176525a" + _
"26e0b3")>
Public Class FileUtilities
Friend Shared Function AppendDirectorySeparator(dir As String) As String
If Not dir.Trim().EndsWith(Path.DirectorySeparatorChar) Then
Return dir.Trim() + Path.DirectorySeparatorChar
Else
Return dir
End If
End Function
End Class
Ha a következő példa egy nevesített szerelvényre Friend1van lefordítva, a Example.Main metódus Friend1 sikeresen meghívható FileUtilities.AppendDirectorySeparator , bár a metódus a Assembly1 szerelvény belső része. Ha a parancssorból C# nyelven készít fordítást, a /out fordítókapcsolóval győződjön meg arról, hogy a barát-szerelvény neve elérhető, amikor a fordító külső hivatkozásokhoz kapcsolódik.
//
// The source code should be saved in a file named Friend1.cs. It
// can be compiled at the command line as follows:
//
// csc /r:Assembly1.dll /keyfile:<snkfilename> /out:Friend1.dll Friend1.cs
//
// The public key of the Friend1 assembly should correspond to the public key
// specified in the class constructor of the InternalsVisibleTo attribute in the
// Assembly1 assembly.
//
using System;
public class Example
{
public static void Main()
{
string dir = @"C:\Program Files";
dir = FileUtilities.AppendDirectorySeparator(dir);
Console.WriteLine(dir);
}
}
// The example displays the following output:
// C:\Program Files\
'
' The source code should be saved in a file named Friend1.vb. It
' can be compiled at the command line as follows:
'
' vbc Friend1.vb /r:Assembly1.dll /keyfile:<snkfilename>
'
' The public key of the Friend1 assembly should correspond to the public key
' specified in the class constructor of the InternalsVisibleTo attribute in the
' Assembly1 assembly.
'
Module Example
Public Sub Main()
Dim dir As String = "C:\Program Files"
dir = FileUtilities1.AppendDirectorySeparator(dir)
Console.WriteLine(dir)
End Sub
End Module
' The example displays the following output:
' C:\Program Files\
Aláíratlan szerelvények
Az alábbi példa az InternalsVisibleToAttribute attribútum használatával teszi láthatóvá egy aláíratlan szerelvény egy internal tagját egy másik aláíratlan szerelvény számára. Az attribútum biztosítja, hogy az internalStringLib.IsFirstLetterUpperCase elnevezett UtilityLib szerelvény metódusa látható legyen a kódban egy nevesített Friend2szerelvényben. A UtilityLib.dllforráskódja a következő:
using System;
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleToAttribute("Friend2")]
namespace Utilities.StringUtilities
{
public class StringLib
{
internal static bool IsFirstLetterUpperCase(String s)
{
string first = s.Substring(0, 1);
return first == first.ToUpper();
}
}
}
Imports System.Runtime.CompilerServices
<assembly: InternalsVisibleTo("Friend2")>
Namespace Utilities.StringUtilities
Public Class StringLib
Friend Shared Function IsFirstLetterUpperCase(s As String) As Boolean
Dim first As String = s.Substring(0, 1)
Return first = first.ToUpper()
End Function
End Class
End Namespace
Az alábbi példa a szerelvény forráskódját Friend2 tartalmazza. Vegye figyelembe, hogy ha a parancssorból C#-et készít, a /out fordítókapcsolóval győződjön meg arról, hogy az ismerős szerelvény neve elérhető, amikor a fordító külső hivatkozásokhoz kapcsolódik.
using System;
public class Example1
{
public static void Main()
{
String s = "The Sign of the Four";
//Console.WriteLine(Utilities.StringUtilities.StringLib.IsFirstLetterUpperCase(s));
}
}
Module Example1
Public Sub Main()
Dim s As String = "The Sign of the Four"
' Console.WriteLine(Utilities.StringUtilities.StringLib.IsFirstLetterUpperCase(s))
End Sub
End Module
Megjegyzések
Az InternalsVisibleToAttribute attribútum azt határozza meg, hogy azok a típusok, amelyek általában csak az aktuális szerelvényen belül láthatók, egy adott szerelvény számára láthatók legyenek.
A C#-ban vagy a Visual Basicben hatókörrel rendelkezőinternal típusok és tagok általában csak abban a szerelvényben láthatók, amelyben definiálva vannak.Friend A hatókörrel rendelkező protected internal típusok és tagok (Protected Friend hatókör a Visual Basic-ben) csak a saját gyűjteményükben vagy az őket tartalmazó osztályból származó típusok számára láthatók. A private protected hatókörrel rendelkező típusok és tagok (Private Protected hatókör a Visual Basic) az adott osztályban vagy az aktuális szerelvényen belül az adott osztályból származó típusokban láthatók.
Az InternalsVisibleToAttribute attribútum ezeket a típusokat és tagokat egy adott szerelvény típusok számára is láthatóvá teszi, amelyet barát-szerelvénynek neveznek. Ez csak a internal (FriendVisual Basicben), (protected internala Visual Basicben) Protected Friendés private protected (Private Protecteda Visual Basicben) tagokra vonatkozik, de nemprivate.
Note
A private protected (Private Protected a Visual Basic-ben) tagok esetében az InternalsVisibleToAttribute attribútum csak a tag tartalmazó osztályából származó típusokra terjeszti ki a hozzáférhetőséget.
Az attribútum a szerelvény szintjén kerül alkalmazásra. Ez azt jelenti, hogy egy forráskódfájl elején, vagy egy Visual Studio-projekt AssemblyInfo fájljában is szerepelhet. Az attribútum segítségével megadhat egyetlen barátszerelvényt, amely hozzáférhet az aktuális szerelvény belső típusaihoz és tagjaihoz. Kétféleképpen definiálhat több barátszerelvényt. Ezek különálló szerelvényszintű attribútumokként is megjelenhetnek, ahogy az alábbi példa is szemlélteti.
[assembly:InternalsVisibleTo("Friend1a")]
[assembly:InternalsVisibleTo("Friend1b")]
<assembly:InternalsVisibleTo("Friend1a")>
<assembly:InternalsVisibleTo("Friend1b")>
Különálló InternalsVisibleToAttribute címkékkel, de egyetlen assembly kulcsszóval is megjelenhetnek, ahogy azt az alábbi példa szemlélteti.
[assembly:InternalsVisibleTo("Friend2a"),
InternalsVisibleTo("Friend2b")]
<Assembly:InternalsVisibleTo("Friend2a"), _
Assembly:InternalsVisibleTo("Friend2b")>
A barátszerelvényt a InternalsVisibleToAttribute konstruktor azonosítja. Az aktuális szerelvényt és az ismerős szerelvényt is alá kell írni, vagy mindkét szerelvényt erős névvel kell aláírni.
Ha mindkét szerelvény nincs aláírva, az argumentum az assemblyName ismerős szerelvény nevét tartalmazza, amely címtár-elérési út vagy fájlnévkiterjesztés nélkül van megadva.
Ha mindkét szerelvény erős névvel van aláírva, a InternalsVisibleToAttribute konstruktor argumentumának tartalmaznia kell a könyvtár elérési útja és fájlnévkiterjesztése nélküli szerelvény nevét, valamint a teljes nyilvános kulcsot (és nem a nyilvános kulcs jogkivonatát). Ha egy erős nevű assembly teljes nyilvános kulcsát szeretné lekérni, lásd a teljes nyilvános kulcs lekérése című szakaszt a cikk további részében. További információkért a InternalsVisibleToAttribute erősnevű szerelvényekkel való használatáról lásd a InternalsVisibleToAttribute konstruktort.
Ne adjon meg értékeket az CultureInfoVersionProcessorArchitecture argumentumban, a Visual Basic, a C# és a C++ fordítók ezt fordítóhibaként kezelik. Ha olyan fordítót használ, amely nem tekinti hibának (például az IL Assembler (ILAsm.exe)), és a szerelvények erős nevet viselnek, kivétel keletkezik, amikor a megadott barát szerelvény először hozzáfér az MethodAccessException attribútumot tartalmazó szerelvényhez.
Az attribútum használatáról további információt a Barát szerelvények és a C++ barátszerelvények című témakörben talál.
A teljes nyilvános kulcs lekérése
Az Erős név eszközzel (Sn.exe) lekérheti a teljes nyilvános kulcsot egy erős nevű kulcsfájlból (.snk). Ehhez hajtsa végre a következő lépéseket:
Bontsa ki a nyilvános kulcsot az erős nevű kulcsfájlból egy külön fájlba:
Sn -p <snk_file> <outfile>A teljes nyilvános kulcs megjelenítése a konzolon:
Sn -tp <outfile>Másolja és illessze be a teljes nyilvános kulcs értékét a forráskódba.
A barátszerelvény fordítása C-vel#
Ha a C#-fordítóval fordítja le a barát-összeállítást, a /out kapcsolóval kifejezetten meg kell adnia a kimeneti fájl nevét (.exe vagy .dll). 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. A /out fordító beállítás nem kötelező a Visual Basic fordítóhoz, és a megfelelő -out vagy -o fordító beállítás nem használható az F# fordítóval való fordításkor.
A barát összeszerelés lefordítása C++ használatával
A C++ direktívában az attribútumot InternalsVisibleToAttribute kell használnia, hogy az as_friend attribútum által engedélyezett belső tagok elérhetők legyenek egy barát összeállítás számára. További információért lásd: Barát-összeállítások (C++).
Konstruktorok
| Name | Description |
|---|---|
| InternalsVisibleToAttribute(String) |
Inicializálja az InternalsVisibleToAttribute osztály új példányát a megadott barátszerelvény nevével. |
Tulajdonságok
| Name | Description |
|---|---|
| AllInternalsVisible |
Ez a tulajdonság nincs implementálva. |
| AssemblyName |
Lekéri annak a barátszerelvénynek a nevét, amelynek a kulcsszóval |
| TypeId |
Ha származtatott osztályban implementálják, ehhez egy egyedi azonosítót Attributekap. (Öröklődés forrása Attribute) |
Metódusok
| Name | Description |
|---|---|
| Equals(Object) |
Olyan értéket ad vissza, amely jelzi, hogy ez a példány egyenlő-e egy adott objektummal. (Öröklődés forrása Attribute) |
| GetHashCode() |
A példány kivonatkódját adja vissza. (Öröklődés forrása Attribute) |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| IsDefaultAttribute() |
Ha egy származtatott osztályban felül van bírálva, azt jelzi, hogy a példány értéke-e a származtatott osztály alapértelmezett értéke. (Öröklődés forrása Attribute) |
| Match(Object) |
Származtatott osztály felülírásakor egy olyan értéket ad vissza, amely jelzi, hogy ez a példány egy adott objektummal egyenlő-e. (Öröklődés forrása Attribute) |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. (Öröklődés forrása Object) |
Explicit interfész-implementációk
| Name | Description |
|---|---|
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Névkészletet képez le a küldési azonosítók megfelelő készletére. (Öröklődés forrása Attribute) |
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Lekéri egy objektum típusadatait, amelyek a felület típusadatainak lekérésére használhatók. (Öröklődés forrása Attribute) |
| _Attribute.GetTypeInfoCount(UInt32) |
Lekéri az objektumok által biztosított típusinformációs felületek számát (0 vagy 1). (Öröklődés forrása Attribute) |
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Hozzáférést biztosít az objektumok által közzétett tulajdonságokhoz és metódusokhoz. (Öröklődés forrása Attribute) |