Domaine d'accessibilité (référence C#)
Le domaine d'accessibilité d'un membre indique dans quelles sections du programme un membre peut être référencé. Si le membre est imbriqué dans un autre type, son domaine d'accessibilité est déterminé à la fois par le niveau d'accessibilité du membre et par le domaine d'accessibilité du type conteneur immédiat.
Le domaine d'accessibilité d'un type de niveau supérieur correspond au moins à la programmation du projet dans lequel il est déclaré. Autrement dit, le domaine inclut tous les fichiers sources de ce projet. Le domaine d'accessibilité d'un type imbriqué correspond au moins au texte du programme du type dans lequel il est déclaré. Autrement dit, le domaine est le corps du type, ce qui inclut tous les types imbriqués. Le domaine d'accessibilité d'un type imbriqué ne dépasse jamais celui du type conteneur. Ces concepts sont illustrés dans l'exemple ci-dessous.
Exemple
Cet exemple met en jeu un type de niveau supérieur, T1, et deux classes imbriquées, M1 et M2. Les classes contiennent des champs dotés d'accessibilités déclarées différentes. Dans la méthode Main, un commentaire suit chaque instruction pour indiquer le domaine d'accessibilité de chaque membre. Notez que les instructions qui tentent de référencer les membres inaccessibles ont été placées en commentaire. Si vous voulez examiner les erreurs de compilation causées par la référence à un membre inaccessible, supprimez une marque de commentaire à chaque fois.
namespace AccessibilityDomainNamespace
{
public class T1
{
public static int publicInt;
internal static int internalInt;
private static int privateInt = 0;
static T1()
{
// T1 can access public or internal members
// in a public or private (or internal) nested class
M1.publicInt = 1;
M1.internalInt = 2;
M2.publicInt = 3;
M2.internalInt = 4;
// Cannot access the private member privateInt
// in either class:
// M1.privateInt = 2; //CS0122
}
public class M1
{
public static int publicInt;
internal static int internalInt;
private static int privateInt = 0;
}
private class M2
{
public static int publicInt = 0;
internal static int internalInt = 0;
private static int privateInt = 0;
}
}
class MainClass
{
static void Main()
{
// Access is unlimited:
T1.publicInt = 1;
// Accessible only in current assembly:
T1.internalInt = 2;
// Error CS0122: inaccessible outside T1:
// T1.privateInt = 3;
// Access is unlimited:
T1.M1.publicInt = 1;
// Accessible only in current assembly:
T1.M1.internalInt = 2;
// Error CS0122: inaccessible outside M1:
// T1.M1.privateInt = 3;
// Error CS0122: inaccessible outside T1:
// T1.M2.publicInt = 1;
// Error CS0122: inaccessible outside T1:
// T1.M2.internalInt = 2;
// Error CS0122: inaccessible outside M2:
// T1.M2.privateInt = 3;
// Keep the console open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
}
Spécification du langage C#
Pour plus d'informations, voir 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
Modificateurs d'accès (référence C#)
Niveaux d'accessibilité (référence C#)
Limitations sur l'utilisation des niveaux d'accessibilité (référence C#)
Modificateurs d'accès (Guide de programmation C#)