Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het protected trefwoord is een toegangsmodificator.
Opmerking
In dit artikel wordt toegang behandeld protected . Het protected trefwoord maakt ook deel uit van de protected internal en private protected toegangsaanpassingen.
U hebt toegang tot een beveiligd lid binnen de klasse en op afgeleide klasse-exemplaren.
Zie protected voor een vergelijking van de andere toegangsaanpassingen.
De C#-taalreferentiedocumenten beschrijven de meest recent uitgebrachte versie van de C#-taal. Het bevat ook de eerste documentatie voor functies in openbare previews voor de aanstaande taalrelease.
De documentatie identificeert alle functies die voor het eerst zijn geïntroduceerd in de laatste drie versies van de taal of in de huidige openbare previews.
Aanbeveling
Raadpleeg het artikel over de versiegeschiedenis van de C#-taal om te achterhalen wanneer een functie voor het eerst is geïntroduceerd in C#.
U kunt alleen toegang krijgen tot een beveiligd lid van een basisklasse in een afgeleide klasse als de toegang plaatsvindt via het afgeleide klassetype. Denk bijvoorbeeld aan het volgende codesegment:
namespace Example1
{
class BaseClass
{
protected int myValue = 123;
}
class DerivedClass : BaseClass
{
static void Main()
{
var baseObject = new BaseClass();
var derivedObject = new DerivedClass();
// Error CS1540, because myValue can only be accessed through
// the derived class type, not through the base class type.
// baseObject.myValue = 10;
// OK, because this class derives from BaseClass.
derivedObject.myValue = 10;
}
}
}
De instructie baseObject.myValue = 10 genereert een fout omdat deze toegang heeft tot het beveiligde lid via een verwijzing naar een basisklasse (baseObject is van het type BaseClass). U hebt alleen toegang tot beveiligde leden via het afgeleide klassetype of de typen die hiervan zijn afgeleid.
In tegenstelling tot private protected staat de protected-toegangsmodificator toegang toe vanuit afgeleide klassen in elke assembly. In tegenstelling tot protected internal, wordt geen toegang toegestaan vanuit niet-afgeleide klassen binnen dezelfde assembly.
U kunt structleden niet declareren als beveiligd omdat structs niet kunnen worden overgenomen.
In dit voorbeeld is de klasse DerivedPoint afgeleid van Point. Daarom hebt u rechtstreeks vanuit de afgeleide klasse toegang tot de beveiligde leden van de basisklasse.
namespace Example2
{
class Point
{
protected int x;
protected int y;
}
class DerivedPoint: Point
{
static void Main()
{
var dpoint = new DerivedPoint();
// Direct access to protected members.
dpoint.x = 10;
dpoint.y = 15;
Console.WriteLine($"x = {dpoint.x}, y = {dpoint.y}");
}
}
// Output: x = 10, y = 15
}
Als u de toegangsniveaus van x en y naar privé wijzigt, retourneert de compiler de foutberichten:
'Point.y' is inaccessible due to its protection level.
'Point.x' is inaccessible due to its protection level.
In het volgende voorbeeld ziet u dat protected leden toegankelijk zijn vanuit afgeleide klassen, zelfs wanneer ze zich in verschillende assembly's bevinden:
// Assembly1.cs
// Compile with: /target:library
namespace Assembly1
{
public class BaseClass
{
protected int myValue = 0;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
namespace Assembly2
{
using Assembly1;
class DerivedClass : BaseClass
{
void Access()
{
// OK, because protected members are accessible from
// derived classes in any assembly
myValue = 10;
}
}
}
Deze toegankelijkheid tussen assembly's onderscheidt protected zich van private protected (waardoor de toegang tot dezelfde assembly wordt beperkt), maar is vergelijkbaar met protected internal (hoewel protected internal het ook mogelijk is om dezelfde assembly toegang te verlenen vanuit niet-afgeleide klassen).
C#-taalspecificatie
Zie Toegankelijkheid gedeclareerd in de C#-taalspecificatie voor meer informatie. De taalspecificatie is de definitieve bron voor de C#-syntaxis en het gebruik.