internal (Référence C#)

Le mot clé internal est un modificateur d'accès pour les types et les membres de types. Les types ou membres internes ne sont accessibles que dans des fichiers figurant dans le même assembly, comme dans l'exemple suivant :

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

Il est possible d'accéder aux types ou aux membres qui ont accès au modificateur protected internal à partir de l'assembly actuel ou des types dérivés de la classe contenante.

Pour comparer le modificateur d'accès internal et les autres modificateurs d'accès, consultez Niveaux d'accessibilité (référence C#) et Modificateurs d'accès (Guide de programmation C#).

Pour plus d'informations sur les assemblys, consultez Assemblys et le Global Assembly Cache (C# et Visual Basic).

L'utilisation de l'accès interne est courante dans un développement basé sur des composants, car elle permet à un groupe de composants de coopérer de manière privée sans s'exposer au reste du code d'application. Par exemple, une infrastructure pour la génération d'interfaces utilisateur graphiques peut fournir des classes Control et Form qui coopèrent en utilisant des membres dotés d'un accès interne. Comme ces membres sont internes, ils ne sont pas exposés au code qui utilise l'infrastructure.

C'est une erreur que de référencer un type ou un membre avec accès interne en dehors de l'assembly dans lequel il a été défini.

Notes

Une méthode internal virtual peut être substituée dans certains langages, tels que MSIL (Microsoft Intermediate Language) textuel à l'aide de Ilasm.exe, mais ne peut pas être substituée à l'aide de C#.

Exemple

Cet exemple met en jeu deux fichiers, Assembly1.cs et Assembly1_a.cs. Le premier fichier contient une classe de base interne, BaseClass. Dans le deuxième fichier, une tentative d'instancier BaseClass produira une erreur.

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

Dans cet exemple, utilisez les mêmes fichiers que dans l'exemple 1 et changez le niveau d'accessibilité de BaseClass en public. Modifiez également le niveau d'accessibilité de l'IntM membre en internal. Dans ce cas, vous pouvez instancier la classe, mais vous ne pouvez pas accéder au membre interne.

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

Spécification du langage C#

Pour plus d'informations, consultez la Spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.

Voir aussi

Référence

Mots clés C#

Modificateurs d'accès (référence C#)

Niveaux d'accessibilité (référence C#)

Modificateurs (référence C#)

public (référence C#)

private (référence C#)

protected (référence C#)

Concepts

Guide de programmation C#

Autres ressources

Référence C#