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.
De protected internal combinatie van trefwoorden is een wijziging voor lidtoegang. U hebt toegang tot een beveiligd intern lid van de huidige assembly of van typen die zijn afgeleid van de betreffende klasse. Zie protected internal 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#.
Elk type in de bevatde assembly heeft toegang tot een beveiligd intern lid van een basisklasse. Een afgeleide klasse in een andere assembly heeft alleen toegang tot het lid als de toegang plaatsvindt via een variabele van het afgeleide klassetype. Denk bijvoorbeeld aan het volgende codesegment:
// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
protected internal int myValue = 0;
}
class TestAccess
{
void Access()
{
var baseObject = new BaseClass();
baseObject.myValue = 5;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass : BaseClass
{
static void Main()
{
var baseObject = new BaseClass();
var derivedObject = new DerivedClass();
// Error CS1540, because myValue can only be accessed by
// classes derived from BaseClass.
// baseObject.myValue = 10;
// OK, because this class derives from BaseClass.
derivedObject.myValue = 10;
}
}
Dit voorbeeld bevat twee bestanden en Assembly1.csAssembly2.cs.
Het eerste bestand bevat een openbare basisklasse, BaseClassen een andere klasse, TestAccess.
BaseClass is eigenaar van een beveiligd intern lid, myValuewaartoe het TestAccess type toegang heeft omdat ze zich in dezelfde assembly bevinden.
In het tweede bestand slaagt een poging om toegang te krijgen myValue via een exemplaar van een exemplaar van BaseClass een fout, terwijl een toegang tot dit lid via een exemplaar van een afgeleide klasse DerivedClass slaagt. Deze toegangsregel laat zien dat protected internal toegang vanuit elke klasse binnen dezelfde assembly of afgeleide klassen in elke assembly is toegestaan, waardoor deze het meest geschikt is voor de beveiligde toegangsaanpassingen.
Struct-leden kunnen niet zijn protected internal omdat de struct niet kan worden overgenomen.
Beveiligde interne ledenfuncties overschrijven
Wanneer u een virtueel lid overschrijft, is de toegankelijkheidsaanpassing van de overschreven methode afhankelijk van de assembly waarin u de afgeleide klasse definieert.
Wanneer u de afgeleide klasse definieert in dezelfde assembly als de basisklasse, hebben protected internal alle overschreven leden toegang. Als u de afgeleide klasse definieert in een andere assembly dan de basisklasse, hebben protected overschreven leden toegang.
// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
protected internal virtual int GetExampleValue()
{
return 5;
}
}
public class DerivedClassSameAssembly : BaseClass
{
// Override to return a different example value, accessibility modifiers remain the same.
protected internal override int GetExampleValue()
{
return 9;
}
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClassDifferentAssembly : BaseClass
{
// Override to return a different example value, since this override
// method is defined in another assembly, the accessibility modifiers
// are only protected, instead of protected internal.
protected override int GetExampleValue()
{
return 2;
}
}
C#-taalspecificatie
Zie de C#-taalspecificatie voor meer informatie. De taalspecificatie is de definitieve bron voor de C#-syntaxis en het gebruik.