Toegankelijkheidsdomein (C#-verwijzing)
Het toegankelijkheidsdomein van een lid geeft aan in welke programmasecties een lid kan worden verwezen. Als het lid is genest binnen een ander type, wordt het toegankelijkheidsdomein bepaald door zowel het toegankelijkheidsniveau van het lid als het toegankelijkheidsdomein van het onmiddellijk met het betreffende type.
Het toegankelijkheidsdomein van een type op het hoogste niveau is ten minste de programmatekst van het project waarin het is gedeclareerd. Dat wil gezegd, het domein bevat alle bronbestanden van dit project. Het toegankelijkheidsdomein van een genest type is ten minste de programmatekst van het type waarin het wordt gedeclareerd. Dat wil gezegd, het domein is de hoofdtekst van het type, die alle geneste typen bevat. Het toegankelijkheidsdomein van een genest type overschrijdt nooit het domein van het betreffende type. Deze concepten worden in het volgende voorbeeld gedemonstreerd.
Opmerking
Dit voorbeeld bevat een type op het hoogste niveau, T1
en twee geneste klassen, M1
en M2
. De klassen bevatten velden met verschillende gedeclareerde toegankelijkheidsproblemen. In de Main
methode volgt een opmerking elke instructie om het toegankelijkheidsdomein van elk lid aan te geven. U ziet dat de instructies die proberen te verwijzen naar de niet-toegankelijke leden, worden uitgeschakeld. Als u de compilerfouten wilt zien die worden veroorzaakt door te verwijzen naar een niet-toegankelijk lid, verwijdert u de opmerkingen één voor één.
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();
}
}
C#-taalspecificatie
Zie de C#-taalspecificatie voor meer informatie. De taalspecificatie is de definitieve bron voor de C#-syntaxis en het gebruik.