Einschränkungen bei der Verwendung von Zugriffsebenen (C#-Referenz)Restrictions on Using Accessibility Levels (C# Reference)

Wenn Sie in einer Deklaration einen Typ angeben, überprüfen Sie, ob die Zugriffsebene dieses Typs von der Zugriffsebene eines Members oder eines anderen Typs abhängt.When you specify a type in a declaration, check whether the accessibility level of the type is dependent on the accessibility level of a member or of another type. Auf die direkte Basisklasse muss z.B. mindestens genauso zugegriffen werden können wie auf die abgeleitete Klasse.For example, the direct base class must be at least as accessible as the derived class. Die folgende Deklaration verursacht einen Compilerfehler, da die Basisklasse BaseClass eine stärkere Zugriffsbeschränkung hat als MyClass:The following declarations cause a compiler error because the base class BaseClass is less accessible than MyClass:

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

In der folgenden Tabelle werden die Einschränkungen für deklarierte Zugriffsebenen zusammengefasst.The following table summarizes the restrictions on declared accessibility levels.

KontextContext HinweiseRemarks
KlassenClasses Die direkte Basisklasse eines Klassentyps muss mindesten dieselben Zugriffsmöglichkeiten wie der Klassentyp selbst bieten.The direct base class of a class type must be at least as accessible as the class type itself.
SchnittstellenInterfaces Die explizite Basisschnittstelle eines Schnittstellentyps muss mindesten dieselben Zugriffsmöglichkeiten bieten wie der Schnittstellentyp selbst.The explicit base interfaces of an interface type must be at least as accessible as the interface type itself.
DelegatenDelegates Die Rückgabe- und Parametertypen eines Delegattyps müssen mindestens dieselben Zugriffsmöglichkeiten wie der Delegattyp selbst bieten.The return type and parameter types of a delegate type must be at least as accessible as the delegate type itself.
KonstantenConstants Der Typ einer Konstante muss mindestens dieselben Zugriffsmöglichkeiten wie die Konstante selbst bieten.The type of a constant must be at least as accessible as the constant itself.
FelderFields Der Typ eines Felds muss mindestens dieselben Zugriffsmöglichkeiten bieten wie das Feld selbst.The type of a field must be at least as accessible as the field itself.
MethodenMethods Die Rückgabe- und Parametertypen einer Methode müssen mindestens dieselben Zugriffsmöglichkeiten bieten wie die Methode selbst.The return type and parameter types of a method must be at least as accessible as the method itself.
EigenschaftenProperties Der Typ einer Eigenschaft muss mindestens dieselben Zugriffsmöglichkeiten bieten wie die Eigenschaft selbst.The type of a property must be at least as accessible as the property itself.
EreignisseEvents Der Typ eines Ereignisses muss mindestens dieselben Zugriffsmöglichkeiten bieten wie das Ereignis selbst.The type of an event must be at least as accessible as the event itself.
IndexerIndexers Der Typ und die Parametertypen eines Indexers müssen mindestens dieselben Zugriffsmöglichkeiten bieten wie der Indexer selbst.The type and parameter types of an indexer must be at least as accessible as the indexer itself.
OperatorenOperators Die Rückgabe- und Parametertypen eines Operators müssen mindestens dieselben Zugriffsmöglichkeiten bieten wie der Operator selbst.The return type and parameter types of an operator must be at least as accessible as the operator itself.
KonstruktorenConstructors Die Parametertypen eines Konstruktors müssen mindestens dieselben Zugriffsmöglichkeiten bieten wie der Konstruktor selbst.The parameter types of a constructor must be at least as accessible as the constructor itself.

BeispielExample

Das folgende Beispiel enthält fehlerhafte Deklarationen verschiedener Typen.The following example contains erroneous declarations of different types. Der Kommentar nach jeder Deklaration gibt den erwarteten Compilerfehler an.The comment following each declaration indicates the expected compiler error.

// 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#-ProgrammiersprachenspezifikationC# Language Specification

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

Siehe auchSee Also

C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide
C#-SchlüsselwörterC# Keywords
ZugriffsmodifiziererAccess Modifiers
ZugriffsdomäneAccessibility Domain
ZugriffsebenenAccessibility Levels
ZugriffsmodifiziererAccess Modifiers
publicpublic
privateprivate
protectedprotected
internalinternal