Delen via


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 private protected voor een vergelijking van de andere toegangsaanpassingen.

Opmerking

De private protected toegangsaanpassing is geldig in C#-versie 7.2 en hoger.

Voorbeeld

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:

// 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 zal een poging om toegang te krijgen tot myValue als een geërfd lid van DerivedClass2 een fout veroorzaken, omdat private protected leden alleen toegankelijk zijn door afgeleide typen binnen dezelfde assembly. Dit is het belangrijkste verschil van protected (dat toegang toestaat vanuit afgeleide klassen in elke assembly) en protected internal (waarmee toegang vanuit elke klasse binnen dezelfde assembly of afgeleide klassen in elke assembly mogelijk is).

Als Assembly1.cs een InternalsVisibleToAttribute bevat dat Assembly2 noemt, 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 wanneer u wilt dat afgeleide klassen in een assembly toegang hebben tot het klasse-element.
  • Gebruik protected internal wanneer u de meest permissieve toegang wilt (elke klasse in dezelfde assembly OF afgeleide klassen waar dan ook)
  • Gebruik private protected deze functie wanneer u de meest beperkende beveiligde toegang wilt (alleen afgeleide klassen in dezelfde assembly)

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.

Zie ook