internal (C#-Referenz)

Aktualisiert: November 2007

Bei dem internal-Schlüsselwort handelt es sich um einen Zugriffsmodifizierer für Typen und Typmember. Auf interne Typen oder Member kann nur in Dateien derselben Assembly zugegriffen werden, wie dieses Beispiel zeigt:

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

Einen Vergleich von internal mit den anderen Zugriffsmodifizierern finden Sie unter Zugriffsebenen (C#-Referenz) und Zugriffsmodifizierer (C#-Programmierhandbuch).

Weitere Informationen zu Assemblys finden Sie unter Assemblys und der globale Assemblycache (C#-Programmhandbuch).

Der interne Zugriff wird häufig in komponentenbasierter Entwicklung verwendet, da er einer Gruppe von Komponenten ermöglicht, in einer nicht öffentlichen Weise zusammenzuwirken, ohne dem Rest des Anwendungscodes zugänglich zu sein. Ein Framework zum Erstellen von grafischen Benutzeroberflächen kann beispielsweise die Control-Klasse und die Form-Klasse bereitstellen, die unter Verwendung von Membern mit internem Zugriff zusammenwirken. Da es sich bei diesen Membern um interne Elemente handelt, sind sie nicht dem Code, der das Gerüst verwendet, zugänglich gemacht worden.

Außerhalb der Assembly, in der ein Typ oder Member mit internem Zugriff definiert wurde, darf nicht auf diesen verwiesen werden.

Hinweis:

Eine internal virtual-Methode kann in einigen Sprachen, z. B. textbasierte MSIL (Microsoft Intermediate Language), mit Ilasm.exe überschrieben werden, selbst dann, wenn sie mit C# nicht überschrieben werden kann.

Beispiel

In diesem Beispiel sind zwei Dateien enthalten, Assembly1.cs und Assembly2.cs. Die erste Datei weist eine interne Basisklasse auf, BaseClass. In der zweiten Datei erzeugt ein Versuch, BaseClass zu instanziieren, einen 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
   }
}

Verwenden Sie in diesem Beispiel dieselben Dateien wie in Beispiel 1, und ändern Sie die Zugriffsebene von BaseClass in public. Ändern Sie außerdem die Zugriffsebene des Members IntM auf internal. In diesem Fall 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 finden Sie in den folgenden Abschnitten von C#-Programmiersprachenspezifikation:

  • 3.5.1 Deklarierter Zugriff

  • 3.5.4 Zugriffsbeschränkungen

  • 10.3.5 Zugriffsmodifizierer

  • 10.3.8.2 Deklarierter Zugriff

Siehe auch

Konzepte

C#-Programmierhandbuch

Referenz

C#-Schlüsselwörter

Zugriffsmodifizierer (C#-Referenz)

Zugriffsebenen (C#-Referenz)

Modifizierer (C#-Referenz)

public (C#-Referenz)

private (C#-Referenz)

protected (C#-Referenz)

Weitere Ressourcen

C#-Referenz