Delen via


privébeveiliging (C#-verwijzing)

De private protected combinatie van trefwoorden is een wijziging voor lidtoegang. Typen die zijn afgeleid van de klasse en die worden gedeclareerd in de insluitingsassembly, hebben toegang tot een privé beveiligd lid. Zie private 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#.

Afgeleide typen hebben alleen toegang tot een privé beveiligd lid van een basisklasse in de bijbehorende assembly als het statische type van de variabele het afgeleide klassetype is. Denk bijvoorbeeld aan het volgende codesegment:

// Assembly1.cs
// Compile with: /target:library
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.csAssembly2.cs. Het eerste bestand bevat een openbare basisklasse BaseClassen een type dat ervan is afgeleid. DerivedClass1 BaseClass is eigenaar van een privé beschermde member, myValue, waar DerivedClass1 als geërfd lid binnen dezelfde assembly toegang toe kan krijgen.

In het tweede bestand produceert een poging om toegang te krijgen myValue als een overgenomen lid van DerivedClass2 een fout, omdat private protected leden alleen toegankelijk zijn door afgeleide typen binnen dezelfde assembly. Deze beperking is het belangrijkste verschil van protected (waarmee toegang van afgeleide klassen in elke assembly mogelijk is) en protected internal (waarmee toegang vanuit elke klasse binnen dezelfde assembly of afgeleide klassen in elke assembly mogelijk is).

Als Assembly1.cs deze namen InternalsVisibleToAttributeAssembly2bevat, 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.

Vergelijking met andere beveiligde toegangsaanpassingen

De volgende tabel bevat een overzicht van de belangrijkste verschillen tussen de drie beveiligde toegangsaanpassingen:

Toegangsmodifier Dezelfde assembly, afgeleide klasse Dezelfde assembly, niet-afgeleide klasse Verschillende Assembly, Afgeleide Klasse
protected ✔️ ✔️
protected internal ✔️ ✔️ ✔️
private protected ✔️
  • Gebruik protected deze functie als u afgeleide klassen in een assembly wilt gebruiken om toegang te krijgen tot het lid.
  • Gebruik protected internal deze functie wanneer u overal de meest voorwaardelijke toegang wilt (elke klasse in dezelfde assembly of afgeleide klassen).
  • Gebruik private protected deze functie als u de meest beperkende beveiligde toegang wilt (alleen afgeleide klassen in dezelfde assembly).

U kunt structleden niet declareren private protected omdat structs niet kunnen worden overgenomen.

C#-taalspecificatie

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

Zie ook