Hjälpmedelsdomän (C#-referens)
Tillgänglighetsdomänen för en medlem anger i vilka programavsnitt en medlem kan refereras till. Om medlemmen är kapslad inom en annan typ bestäms dess tillgänglighetsdomän av både tillgänglighetsnivån för medlemmen och tillgänglighetsdomänen för den omedelbart innehållande typen.
Tillgänglighetsdomänen för en toppnivåtyp är åtminstone programtexten för projektet som den deklareras i. Domänen innehåller alltså alla källfiler för det här projektet. Tillgänglighetsdomänen för en kapslad typ är minst programtexten för den typ som den deklareras i. Domänen är alltså typtexten, som innehåller alla kapslade typer. Tillgänglighetsdomänen för en kapslad typ överskrider aldrig den som innehåller typen. Dessa begrepp visas i följande exempel.
Exempel
Det här exemplet innehåller en toppnivåtyp, T1
, och två kapslade klasser och M1
M2
. Klasserna innehåller fält som har olika deklarerade åtkomstmöjligheter. Main
I metoden följer en kommentar varje instruktion för att ange tillgänglighetsdomänen för varje medlem. Observera att de instruktioner som försöker referera till de otillgängliga medlemmarna kommenteras ut. Om du vill se kompilatorfelen som orsakas av att referera till en otillgänglig medlem tar du bort kommentarerna en i taget.
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();
}
}
Språkspecifikation för C#
Mer information finns i C#-språkspecifikationen. Språkspecifikationen är den slutgiltiga källan för C#-syntax och -användning.