privébeveiliging (C#-verwijzing)
De private protected
combinatie van trefwoorden is een wijziging voor lidtoegang. Een privé beveiligd lid is toegankelijk op basis van typen die zijn afgeleid van de betreffende klasse, maar alleen binnen de bijbehorende assembly. Zie Toegankelijkheidsniveaus voor een vergelijking van private protected
de andere toegangsaanpassingen.
Notitie
De private protected
toegangsaanpassing is geldig in C#-versie 7.2 en hoger.
Opmerking
Een privé beveiligd lid van een basisklasse is alleen toegankelijk vanuit afgeleide typen in de bijbehorende assembly als het statische type van de variabele het afgeleide klassetype is. Denk bijvoorbeeld aan het volgende codesegment:
public class BaseClass
{
private protected int myValue = 0;
}
public class DerivedClass1 : BaseClass
{
void Access()
{
var baseObject = new BaseClass();
// Error CS1540, because myValue can only be accessed by
// classes derived from BaseClass.
// baseObject.myValue = 5;
// OK, accessed through the current derived class instance
myValue = 5;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass2 : BaseClass
{
void Access()
{
// Error CS0122, because myValue can only be
// accessed by types in Assembly1
// myValue = 10;
}
}
Dit voorbeeld bevat twee bestanden en Assembly1.cs
Assembly2.cs
.
Het eerste bestand bevat een openbare basisklasse BaseClass
en een type dat ervan is afgeleid. DerivedClass1
BaseClass
is eigenaar van een privé beveiligd lid, myValue
dat DerivedClass1
op twee manieren toegang probeert te krijgen. Bij de eerste poging om toegang myValue
te krijgen via een exemplaar van een exemplaar, BaseClass
treedt er een fout op. De poging om het als overgenomen lid te gebruiken, slaagt er echter wel in DerivedClass1
.
In het tweede bestand wordt een poging om toegang te krijgen myValue
als overgenomen lid van DerivedClass2
een fout veroorzaakt, omdat deze alleen toegankelijk is door afgeleide typen in Assembly1.
Als Assembly1.cs
deze namen InternalsVisibleToAttributeAssembly2
bevat, heeft de afgeleide klasse DerivedClass2
toegang tot private protected
leden die zijn gedeclareerd in BaseClass
. InternalsVisibleTo
maakt private protected
leden zichtbaar voor afgeleide klassen in andere assembly's.
Struct-leden kunnen niet zijn private protected
omdat de struct niet kan worden overgenomen.
C#-taalspecificatie
Zie de C#-taalspecificatie voor meer informatie. De taalspecificatie is de definitieve bron voor de C#-syntaxis en het gebruik.