internal (Référence C#)
Mise à jour : novembre 2007
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;
}
Pour obtenir une comparaison entre 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 (Guide de programmation C#).
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.
Remarque : |
---|
Une méthode internalvirtual 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 Assembly2.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 les sections suivantes dans Spécifications du langage C#.
3.5.1 Accessibilité déclarée
3.5.4 Contraintes d'accessibilité
10.3.5 Modificateurs d'accès
10.3.8.2 Accessibilité déclarée
Voir aussi
Concepts
Référence
Modificateurs d'accès (Référence C#)
Niveaux d'accessibilité (Référence C#)