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èsprotected 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.