internal (référence C#)

Le mot clé internal est un modificateur d’accès pour les types et les membres de type.

Cette page traite de l’accès internal. Le mot clé internal fait également partie du modificateur d’accès protected internal.

Les types et les membres internes sont accessibles seulement dans le même assembly, comme dans l’exemple suivant :

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

Pour obtenir une comparaison de internal et des autres modificateurs d’accès, consultez Niveaux d’accessibilité et Modificateurs d’accès.

Un assembly est une bibliothèque de liens dynamiques (DLL) ou exécutable produite à partir de la compilation d’un ou plusieurs fichiers sources.

Pour plus d'informations sur les assemblys, consultez Aassemblys dans .NET.

L’accès interne est fréquemment utilisé lors du développement basé sur les composants, car il permet à un groupe de composants de collaborer de façon privée sans être exposés au reste du code de l’application. Par exemple, un framework de création d’interfaces graphiques utilisateur peut fournir les classes Control et Form qui coopèrent en utilisant des membres ayant un accès interne. Étant donné que ces membres sont internes, ils ne sont pas exposés au code qui utilise le framework.

Le fait 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 constitue une erreur.

Exemple 1

Cet exemple contient deux fichiers : Assembly1.cs et Assembly1_a.cs. Le premier fichier contient la classe de base interne BaseClass. Dans le deuxième fichier, une tentative d’instanciation de BaseClass génère 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()
   {  
      var myBase = new BaseClass();   // CS0122  
   }  
}  

Exemple 2

Dans cet exemple, utilisez les mêmes fichiers que vous avez utilisés dans l’exemple 1, et remplacez le niveau d’accessibilité BaseClass par public. Remplacez également le niveau d’accessibilité du membre intM par 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:Assembly2.dll  
public class TestAccess
{  
   static void Main()
   {  
      var myBase = new BaseClass();   // Ok.  
      BaseClass.intM = 444;    // CS0117  
   }  
}  

Spécification du langage C#

Pour plus d’informations, consultez Accessibilité déclarée dans 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