internal (Riferimenti per C#)

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;
}

È possibile accedere ai tipi o ai membri che dispongono di modificatore di accesso protected internal dall'assembly corrente o dai tipi derivati dalla classe che li contiene.

Per un confronto tra il modificatore di 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 (C# e Visual Basic).

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 internal virtual 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 sono inclusi due file, Assembly1.cs e Assembly1_a.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 la Specifiche del linguaggio C#. La specifica del linguaggio è la fonte ufficiale per la sintassi e l'utilizzo di C#.

Vedere anche

Riferimenti

Parole chiave di C#

Modificatori di accesso (Riferimenti per C#)

Livelli di accessibilità (Riferimenti per C#)

Modificatori (Riferimenti per C#)

public (Riferimenti per C#)

private (Riferimenti per C#)

protected (Riferimenti per C#)

Concetti

Guida per programmatori C#

Altre risorse

Riferimenti per C#