Dela via


Tillgänglighetsdomän (C#-referens)

Tillgänglighetsdomänen för en medlem anger de programavsnitt där du kan referera till medlemmen. Om medlemmen är kapslad inom en annan typ avgör både tillgänglighetsnivån för medlemmen och tillgänglighetsdomänen för den omedelbart innehållande typen dess tillgänglighetsdomän.

C#-språkreferensen dokumenterar den senaste versionen av C#-språket. Den innehåller även inledande dokumentation för funktioner i offentliga förhandsversioner för den kommande språkversionen.

Dokumentationen identifierar alla funktioner som först introducerades i de tre senaste versionerna av språket eller i aktuella offentliga förhandsversioner.

Tips/Råd

Information om när en funktion först introducerades i C# finns i artikeln om språkversionshistoriken för C#.

Tillgänglighetsdomänen för en toppnivåtyp innehåller alltid minst programtexten i projektet där du deklarerar den. Domänen innehåller med andra ord alla källfiler i projektet. Tillgänglighetsdomänen för en kapslad typ innehåller alltid minst programtexten av den typ där du deklarerar den. Domänen är med andra ord typtexten, som innehåller alla kapslade typer. Tillgänglighetsdomänen för en kapslad typ överskrider aldrig den som innehåller typen. I följande exempel visas dessa begrepp.

Det här exemplet innehåller en toppnivåtyp, T1, och två kapslade klasser och M1M2. 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. 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.

Se även