Share via


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

Aktualisiert: November 2007

Stellen Sie beim Deklarieren eines Typs sicher, dass der Typ mindestens so zugreifbar ist wie ein anderer Member oder ein anderer Typ. 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 beim Verwenden deklarierter 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 den folgenden Abschnitten von C#-Programmiersprachenspezifikation:

  • 3.5.1 Deklarierter Zugriff

  • 3.5.4 Zugriffsbeschränkungen

  • 10.3.5 Zugriffsmodifizierer

  • 10.3.8.2 Deklarierter Zugriff

  • 10.3.8.5 Zugriff auf private und geschützte Member des enthaltenden Typs

Siehe auch

Konzepte

C#-Programmierhandbuch

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)

Weitere Ressourcen

C#-Referenz