internal (Riferimenti per C#)

La parola chiave internal è un modificatore di accesso per tipi e membri dei tipi.

Questa pagina illustra l'accesso internal. La parola chiave internal fa anche parte del modificatore di accesso protected internal.

I tipi interni o i membri sono accessibili solo all'interno di file nello stesso assembly, come in questo esempio:

public class BaseClass
{  
    // Only accessible within the same assembly.
    internal static int x = 0;
}  

Per un confronto di internal con altri modificatori di accesso, vedere Livelli di accessibilità e Modificatori di accesso.

Un assembly è un eseguibile o una libreria di collegamento dinamico (DLL) prodotta dalla compilazione di uno o più file di origine.

Per altre informazioni sugli assembly, vedere Assembly in .NET.

Un uso comune dell'accesso interno è in fase di sviluppo basato su componenti poiché consente a un gruppo di componenti di collaborare in modo privato senza essere esposti al resto del codice dell'applicazione. Ad esempio, un framework per la creazione di interfacce utente grafiche potrebbe indicare le classi Control e Form che interagiscono usando membri con accesso interno. Poiché questi membri sono interni, non sono esposti al codice che usa il framework.

Non è corretto fare riferimento a un tipo o a un membro con accesso interno all'esterno dell'assembly in cui è stato definito.

Esempio 1

Questo esempio contiene due file, Assembly1.cs e Assembly1_a.cs. Il primo file contiene una classe di 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()
   {  
      var myBase = new BaseClass();   // CS0122  
   }  
}  

Esempio 2

In questo esempio, usare gli stessi file dell'esempio 1 e modificare il livello di accessibilità di BaseClass in public. Modificare anche il livello di accessibilità del membro intM in internal. In questo caso, è possibile creare un'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:Assembly2.dll  
public class TestAccess
{  
   static void Main()
   {  
      var myBase = new BaseClass();   // Ok.  
      BaseClass.intM = 444;    // CS0117  
   }  
}  

Specifiche del linguaggio C#

Per altre informazioni, vedere Accessibilità dichiarata in Specifica del linguaggio C#. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.

Vedi anche