Freigeben über


Einschränkungen bei der Verwendung von Zugriffsebenen (C#-Referenz)

Wenn Sie einen Typ in einer Deklaration angeben, überprüfen Sie, ob die Zugriffsebene des Typs von der Zugriffsebene eines Members oder eines anderen Typs abhängig ist. So muss die direkte Basisklasse mindestens so zugreifbar sein wie die abgeleitete Klasse. Die folgenden Deklarationen verursachen einen Compilerfehler, da die BaseClass-Basisklasse weniger zugreifbar ist als MyClass:

class BaseClass {...}
public class MyClass: BaseClass {...} // Error

Die nachstehende Tabelle fasst die Einschränkungen für deklarierte Zugriffsebenen zusammen.

Kontext

Hinweise

Klassen

Die direkte Basisklasse eines Klassentyps muss mindestens so zugreifbar sein wie der Klassentyp selbst.

Schnittstellen

Die expliziten Basisschnittstellen eines Schnittstellentyps müssen mindestens so zugreifbar sein wie der Schnittstellentyp selbst.

Delegaten

Der Rückgabetyp und die Parametertypen eines Delegattyps müssen mindestens so zugreifbar sein wie der Delegattyp selbst.

Konstanten

Der Typ einer Konstante muss mindestens so zugreifbar sein wie die Konstante selbst.

Felder

Der Typ eines Felds muss mindestens so zugreifbar sein wie das Feld selbst.

Methoden

Der Rückgabetyp und die Parametertypen einer Methode müssen mindestens so zugreifbar sein wie die Methode selbst.

Eigenschaften

Der Typ einer Eigenschaft muss mindestens so zugreifbar sein wie die Eigenschaft selbst.

Ereignisse

Der Typ eines Ereignisses muss mindestens so zugreifbar sein wie das Ereignis selbst.

Indexer

Der Typ und die Parametertypen eines Indexers müssen mindestens so zugreifbar sein wie der Indexer selbst.

Operatoren

Der Rückgabetyp und die Parametertypen eines Operators müssen mindestens so zugreifbar sein wie der Operator selbst.

Konstruktoren

Die Parametertypen eines Konstruktors müssen mindestens so zugreifbar sein wie der Konstruktor selbst.

Beispiel

Im folgenden Beispiel sind falsche Deklarationen verschiedener Typen enthalten. Der einer Deklaration nachfolgende Kommentar zeigt den erwarteten Compilerfehler an.

// Restrictions on Using Accessibility Levels
// CS0052 expected as well as CS0053, CS0056, and CS0057
// To make the program work, change access level of both class B
// and MyPrivateMethod() to public.

using System;

// A delegate:
delegate int MyDelegate();

class B
{
    // A private method:
    static int MyPrivateMethod()
    {
        return 0;
    }
}

public class A
{
    // Error: The type B is less accessible than the field A.myField.
    public B myField = new B();

    // Error: The type B is less accessible
    // than the constant A.myConst.
    public readonly B myConst = new B();

    public B MyMethod()
    {
        // Error: The type B is less accessible 
        // than the method A.MyMethod.
        return new B();
    }

    // Error: The type B is less accessible than the property A.MyProp
    public B MyProp
    {
        set
        {
        }
    }

    MyDelegate d = new MyDelegate(B.MyPrivateMethod);
    // Even when B is declared public, you still get the error: 
    // "The parameter B.MyPrivateMethod is not accessible due to 
    // protection level."

    public static B operator +(A m1, B m2)
    {
        // Error: The type B is less accessible
        // than the operator A.operator +(A,B)
        return new B();
    }

    static void Main()
    {
        Console.Write("Compiled successfully");
    }
}

C#-Programmiersprachenspezifikation

Weitere Informationen finden Sie in der C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auch

Referenz

C#-Schlüsselwörter

Zugriffsmodifizierer (C#-Referenz)

Zugriffsdomäne (C#-Referenz)

Zugriffsebenen (C#-Referenz)

Zugriffsmodifizierer (C#-Programmierhandbuch)

public (C#-Referenz)

private (C#-Referenz)

protected (C#-Referenz)

internal (C#-Referenz)

Konzepte

C#-Programmierhandbuch

Weitere Ressourcen

C#-Referenz