internal (C#-Referenz)

Das Schlüsselwort internal ist ein Zugriffsmodifizierer für Typen und Typmember. Auf interne Typen oder Member kann nur innerhalb einer Datei in derselben Assembly zugegriffen werden, so wie in diesem Beispiel:

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

Auf Typen oder Member, die über den Zugriffsmodifizierer protected internal verfügen, kann von der aktuellen Assembly oder von Typen aus zugegriffen werden, die von der enthaltenden Klasse abgeleitet werden.

Einen Vergleich von internal mit dem anderen Zugriffsmodifizierer finden Sie unter Zugriffsebenen und Zugriffsmodifizierer.

Weitere Informationen zu Assemblys finden Sie unter Assemblys und der globale Assemblycache.

Ein interner Zugriff wird häufig bei komponentenbasierten Entwicklungen verwendet, da auf diese Weise Gruppen von Komponenten privat kooperieren können, ohne dass sie für den Rest des Anwendungscodes verfügbar gemacht werden. Ein Framework könnte z.B für das Erstellen grafischer Benutzeroberflächen Control- und Form-Klassen zur Verfügung stellen, die kooperieren, indem sie Member mit internen Zugriff verwenden. Da diese Member intern sind, werden sie nicht für Code verfügbar gemacht, der das Framework verwendet.

Es ist unzulässig, auf einen Typen oder einen Member mit internem Zugriff außerhalb der Assembly zu verweisen, in der sie definiert wurden.

Beispiel

Dieses Beispiel enthält zwei Dateien, Assembly1.cs und Assembly1_a.cs. Die erste Datei enthält eine interne Basisklasse, BaseClass. In der zweiten Datei führt der Versuch, BaseClass zu instanziieren zu einem Fehler.

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

Beispiel

Verwenden Sie in diesem Beispiel dieselbe Datei, die Sie im ersten Beispiel verwendet haben, und ändern Sie die Zugriffsebene von BaseClass in public. Ändern Sie außerdem die Zugriffsebene des Members IntM in internal. Jetzt können Sie die Klasse instanziieren, aber Sie können nicht auf den internen Member zugreifen.

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

C#-Programmiersprachenspezifikation

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auch

C#-Referenz
C#-Programmierhandbuch
C#-Schlüsselwörter
Zugriffsmodifizierer
Zugriffsebenen
Modifizierer
Public
Private
protected