internal (Riferimenti per C#)
Aggiornamento: novembre 2007
La parola chiave internal è un modificatore di accesso per i tipi e i membri dei tipi. I tipi e i membri interni sono accessibili soltanto all'interno dei file nello stesso assembly, come nell'esempio riportato di seguito:
public class BaseClass
{
// Only accessible within the same assembly
internal static int x = 0;
}
Per un confronto tra il modificatore d'accesso internal e gli altri modificatori di accesso, vedere Livelli di accessibilità (Riferimenti per C#) e Modificatori di accesso (Guida per programmatori C#).
Per ulteriori informazioni sugli assembly, vedere Assembly e Global Assembly Cache (Guida per programmatori C#).
L'accesso interno viene generalmente utilizzato a livello di sviluppo dei componenti poiché consente a un gruppo di componenti di interagire in modo privato senza esporre le proprie funzionalità al resto del codice dell'applicazione. Ad esempio, un framework per la compilazione di interfacce utente grafiche potrebbe fornire le classi Control e Form che interagiscono utilizzando membri con accesso interno. Poiché questi membri sono interni, non sono esposti al codice che utilizza il framework.
È errato fare riferimento a un tipo o a un membro con accesso interno all'esterno dell'assembly in cui è stato definito.
Nota: |
---|
Un metodo internalvirtual può essere sottoposto a override in alcuni linguaggi, ad esempio MSIL (Microsoft Intermediate Language) tramite il file Ilasm.exe, ma non in C#. |
Esempio
Nell'esempio di seguito vengono utilizzati due file: Assembly1.cs e Assembly2.cs. Il primo file contiene una classe base interna BaseClass. Nel secondo file, un tentativo di creare un'istanza di BaseClass genererà un errore.
// Assembly1.cs
// Compile with: /target:library
internal class BaseClass
{
public static int intM = 0;
}
// Assembly1_a.cs
// Compile with: /reference:Assembly1.dll
class TestAccess
{
static void Main()
{
BaseClass myBase = new BaseClass(); // CS0122
}
}
Nell'esempio riportato di seguito, utilizzare gli stessi file dell'esempio 1 e modificare il livello di accessibilità di BaseClass impostandolo su public. Modificare anche il livello di accessibilità del membro IntM impostandolo su internal. In questo caso, è possibile creare l'istanza della classe, ma non è possibile accedere al membro interno.
// Assembly2.cs
// Compile with: /target:library
public class BaseClass
{
internal static int intM = 0;
}
// Assembly2_a.cs
// Compile with: /reference:Assembly1.dll
public class TestAccess
{
static void Main()
{
BaseClass myBase = new BaseClass(); // Ok.
BaseClass.intM = 444; // CS0117
}
}
Specifiche del linguaggio C#
Per ulteriori informazioni, vedere le sezioni riportate di seguito in Specifiche del linguaggio C#:
3.5.1 Accessibilità dichiarata
3.5.4 Vincoli di accessibilità
10.3.5 Modificatori di accesso
10.3.8.2 Accessibilità dichiarata
Vedere anche
Concetti
Riferimenti
Modificatori di accesso (Riferimenti per C#)
Livelli di accessibilità (Riferimenti per C#)
Modificatori (Riferimenti per C#)
protected (Riferimenti per C#)