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.