Share via


Beperkingen voor het gebruik van toegankelijkheidsniveaus (C#-verwijzing)

Wanneer u een type in een declaratie opgeeft, controleert u of het toegankelijkheidsniveau van het type afhankelijk is van het toegankelijkheidsniveau van een lid of van een ander type. De directe basisklasse moet bijvoorbeeld minstens zo toegankelijk zijn als de afgeleide klasse. De volgende declaraties veroorzaken een compilerfout omdat de basisklasse BaseClass minder toegankelijk is dan MyClass:

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

De volgende tabel bevat een overzicht van de beperkingen voor gedeclareerde toegankelijkheidsniveaus.

Context Opmerkingen
Klassen De directe basisklasse van een klassetype moet ten minste zo toegankelijk zijn als het klassetype zelf.
Interfaces De expliciete basisinterfaces van een interfacetype moeten ten minste zo toegankelijk zijn als het interfacetype zelf.
Afgevaardigden Het retourtype en de parametertypen van een gemachtigde moeten ten minste zo toegankelijk zijn als het type gemachtigde zelf.
Constanten Het type constante moet minstens zo toegankelijk zijn als de constante zelf.
Velden Het type veld moet minstens zo toegankelijk zijn als het veld zelf.
Methoden Het retourtype en de parametertypen van een methode moeten ten minste zo toegankelijk zijn als de methode zelf.
Eigenschappen Het type eigenschap moet minstens zo toegankelijk zijn als de eigenschap zelf.
Gebeurtenissen Het type gebeurtenis moet minstens zo toegankelijk zijn als de gebeurtenis zelf.
Indexeerfuncties Het type en de parametertypen van een indexeerfunctie moeten minstens zo toegankelijk zijn als de indexeerfunctie zelf.
Operators Het retourtype en de parametertypen van een operator moeten ten minste zo toegankelijk zijn als de operator zelf.
Constructeurs De parametertypen van een constructor moeten ten minste zo toegankelijk zijn als de constructor zelf.

Opmerking

Het volgende voorbeeld bevat onjuiste declaraties van verschillende typen. De opmerking na elke declaratie geeft de verwachte compilerfout aan.

// 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#-taalspecificatie

Zie de C#-taalspecificatie voor meer informatie. De taalspecificatie is de definitieve bron voor de C#-syntaxis en het gebruik.

Zie ook